使用Java增删改查数据库的操作方法

 更新时间:2024年12月17日 16:34:24   作者:喵果森森  
这篇文章主要介绍了使用Java增删改查数据库的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

前言

既然连接数据库都可以通过java语言实现,那么通过java语言对数据库进行增删改查的操作自然是顺理成章的事情了。

一、PrepareStatement类是什么?

PrepareStatement类是Java JDBC API中的一个类,用于执行预编译的SQL语句。这个类实现java语言增删改查数据库的功能。它是Statement的子接口,提供了更高级别和更灵活的功能。(所以在编译SQL语句的时候,不要使用Statement类,直接使用它的子接口吧!)

通过使用PrepareStatement类,可以先将SQL语句发送到数据库进行编译,然后可以重复执行该语句,并且可以使用参数化查询和批处理等高级功能。

PrepareStatement类可以防止SQL注入攻击,提高性能,并且可以方便地处理不同类型的数据。

SQL注入攻击,以statement类为例,当使用Statement对象执行动态拼接SQL语句时,如果不对用户输入进行正确的过滤和转义,攻击者可以通过构造恶意的“密码"进行输入来修改或执行未经授权的SQL语句。(利用转义漏洞,绕过了账号密码,直接访问并可以攻击数据)

PrepareStatement的构造方法:

connection.PrepareStatement(String sql);
//创建一个新的PrepareStatement对象,以指定的SQL语句初始化。
connection.PrepareStatement(String sql, int autoGeneratedKeys);
//创建一个新的PrepareStatement对象,以指定的SQL语句和生成的键标志初始化。
connection.PrepareStatement(String sql, int[] columnIndexes);
//创建一个新的PrepareStatement对象,以指定的SQL语句和列索引标志初始化。
connection.PrepareStatement(String sql, String[] columnNames);
//创建一个新的PrepareStatement对象,以指定的SQL语句和列名标志初始化。
 

PrepareStatement类是没有直接的构造方法的,但是可以通过Connection对象调用PrepareStatement()方法来创建自己的对象。第一个方法是最经常使用的,其他的想忽略也行。

PrepareStatement类的常用方法
方法功能描述返回值
setNull(int parameterIndex, int sqlType)将指定的参数设置为SQL NULLvoid
setBoolean(int parameterIndex, boolean x)将指定参数设置为给定的Java布尔值void
setByte(int parameterIndex, byte x)将指定参数设置为给定的Java字节值void
setShort(int parameterIndex, short x)将指定参数设置为给定的Java short值void
setInt(int parameterIndex, int x)将指定参数设置为给定的Java int值void
setLong(int parameterIndex, long x)将指定参数设置为给定的Java long值void
setFloat(int parameterIndex, float x)将指定参数设置为给定的Java float值void
setDouble(int parameterIndex, double x)将指定参数设置为给定的Java double值void
setBigDecimal(int parameterIndex, BigDecimal x)将指定参数设置为给定的Java BigDecimal值void
setString(int parameterIndex, String x)将指定参数设置为给定的Java String值void
setBytes(int parameterIndex, byte[] x)将指定参数设置为给定的Java 字节数组void
setDate(int parameterIndex, Date x)将指定参数设置为给定的SQL date值void
setTime(int parameterIndex, Time x)将指定的参数设置为给定的SQL时间戳值void
setObject(int parameterIndex, Object x)将指定参数设置为给定的Java Object对象void
executeQuery()执行这个PreparedStatement对象中的SQL查询,并返回查询生成的ResultSet对象ResultSet
executeUpdate()执行这个PreparedStatement对象中的SQL语句(可能是INSERT、UPDATE或DELETE语句),并返回受影响行的计数int
execute()执行这个PreparedStatement对象中的SQL语句,它可能返回多个结果boolean
clearParameters()清除PreparedStatement对象中的当前参数值void
setArray(int parameterIndex, Array x)将指定参数设置为给定的SQL Array对象void
setBlob(int parameterIndex, Blob x)将指定参数设置为给定的SQL Blob对象void
setClob(int parameterIndex, Clob x)将指定参数设置为给定的SQL Clob对象void

使用以上PrepareStatement的方法就可以实现对数据库的增删改查的功能了。

PrepareStatement类比Statement类多一个预处理的功能,需要使用到通配符" ? "(也正是该功能减轻了SQL注入攻击)

所以,PrepareStatement实例化时的String数据的SQL语句时不完整的,需要将通配符替换掉,才能进行使用,这和格式化输出语句的道理一样。

在上面常用方法的表格中,最常见的是set()方法,尽管数据类型不同,但第一个参数:int parameterIndex 该参数都是指在String字符串中编写SQL语句的第几个通配符,然后这个在SQL语句中的问号( ? )可以被你设置的第二个数据类型替代,SQL语句被补全了,可以进行下一步执行运行的操作了。

二、实操展示

以下的所有操作都建立在连接好数据库之后,对连接框架的代码进行了省略。

增删改查的操作步骤大致都是("查"需要循环输出语句反馈到控制台):

第一步,创建String对象,编写SQL语句。

第二步,利用connection对象调用方法创建PrepareStatement对象。

第三步,使用PrepareStatement类的set()方法,补全SQL语句中的通配符。

最后一步,调用PrepareStatement类的executeUpdate()方法执行该SQL语句。

executeUpdate()方法执行后,Java代码会将SQL语句发送给MySQL数据库,并执行相应的操作,如插入、更新或删除数据。执行完毕后,MySQL数据库会返回操作的结果,Java代码可以通过executeUpdate()方法获取到受影响的行数。

1.增

实操展示:

这是数据库表单原本的样子:

这个table只有三行,需求:添加一个id是104,name是小浩的数据。

主要代码:

String sql = "INSERT INTO table_name (id, name) VALUES (?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 104);
statement.setString(2, "小浩");
statement.executeUpdate();

运行结果:

如上图所示,刷新Workbench,实时显示出了数据库内容的更新。

2.删

实操展示:

这是数据库表单原本的样子:

需求:删除一个id是103,name是小张的数据。

主要代码:

String sql = "DELETE FROM test_table WHERE id = ? AND name = ?";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setString(2, "小张");
statement.executeUpdate();

运行结果:

如上图所示,数据库表单的id=103,name=小张的这一串数据已被删除。

3.改

实操展示:

这是数据库表单原本的样子:

需求:将id=104 name=小王的这一串数据里,id值修改为103。

主要代码:

String sql = "UPDATE test_table SET id= ? WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setInt(2, 104);
statement.executeUpdate();

运行结果:

如上图所示,数据库中小浩的id由104更改为了103。

4.查

这是数据库表单原本的样子:

需求:查询id为101的用户的name值是什么。

主要代码:

String sql = "SELECT name FROM test_table WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 101);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
    // 处理查询结果
    String value1 = resultSet.getString("name");
    System.out.println("查询结果:id值为101的用户名称是 "+value1);
}

运行结果:

对比数据库的信息:

如上面两张图显示,通过PrepareStatement类可以轻松实现java后端与数据库之间的互通。

总结

以上就是使用java的PrepareStatement类对数据库进行增删改查的操作,本文初步介绍了java的使用,没有写关于SQL语句之类的数据库知识,有补充或指正的地方,欢迎在评论区中留言。

到此这篇关于使用Java增删改查数据库的操作方法的文章就介绍到这了,更多相关Java增删改查数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot + Jpa(Hibernate) 架构基本配置详解

    Spring Boot + Jpa(Hibernate) 架构基本配置详解

    本篇文章主要介绍了Spring Boot + Jpa(Hibernate) 架构基本配置详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java字符串格式化功能 String.format用法详解

    Java字符串格式化功能 String.format用法详解

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象,熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处,format()方法有两种重载形式
    2024-09-09
  • 详解SpringBoot使用RedisTemplate操作Redis的5种数据类型

    详解SpringBoot使用RedisTemplate操作Redis的5种数据类型

    本文主要介绍了SpringBoot使用RedisTemplate操作Redis的5种数据类型,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • java遍历途中修改数据及删除数据的方法总结

    java遍历途中修改数据及删除数据的方法总结

    在使用java的集合类遍历数据的时候,在某些情况下可能需要对某些数据进行删除,下面这篇文章主要给大家介绍了关于java遍历途中修改数据及删除数据的方法总结,需要的朋友可以参考下
    2023-10-10
  • java连接数据库增、删、改、查工具类

    java连接数据库增、删、改、查工具类

    这篇文章主要介绍了java连接数据库增、删、改、查工具类,需要的朋友可以参考下
    2014-05-05
  • java 格式化输出数字的方法

    java 格式化输出数字的方法

    在实际工作中,常常需要设定数字的输出格式,如以百分比的形式输出,或者设定小数位数等,现稍微总结如下
    2014-01-01
  • Spring实现拥有者权限验证的方法示例

    Spring实现拥有者权限验证的方法示例

    这篇文章主要介绍了Spring实现拥有者权限验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Springmvc自定义参数转换实现代码解析

    Springmvc自定义参数转换实现代码解析

    这篇文章主要介绍了Springmvc自定义参数转换实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java结构型设计模式之桥接模式详细讲解

    Java结构型设计模式之桥接模式详细讲解

    桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
    2022-09-09
  • 启动SpringBoot报JavaMail加载错误的原因分析和解决

    启动SpringBoot报JavaMail加载错误的原因分析和解决

    这篇文章给大家介绍了启动SpringBoot报JavaMail加载错误的原因分析和解决,文中通过代码示例给出了详细的原因分析和解决方法,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01

最新评论