前言
既然连接数据库都可以通过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()方法来创建自己的对象。第一个方法是最经常使用的,其他的想忽略也行。
方法 | 功能描述 | 返回值 |
setnull(int parameterindex, int sqltype) | 将指定的参数设置为sql null | void |
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增删改查数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论