以前用jdbc在MySQL中增删查改的时候都用的是execute把拼接好的数据直接输送过去,这样有个漏洞,就是在拼接语句的时候,会有一些人拼接非法语句进去,造成数据库数据不安全。
一,针对增删改:
使用Executeupdate,他的返回值类型是int类型,代表操作化对MySQL影响的行数。
拿上篇增加举例
这样的话大大增加了增删改的效率
二,executeQuery:返回值直接就是ResultSet结果集对象
传说的注入式漏洞
就是懂点语法的人可以拼接sql语句查询所有人的信息
select * from stu where uname=’'or 1=1 or ‘’----这句话代表由名字查全部信息,但是条件是1=1所有都满足,可以查出所有人的信息。
就是因为这个原因,我们的preparedstatement就横空出世,是来拯救statement
Preparedstatement和statement的区别:
主要是 sql语句编译的时机不一样
Preparedstatement预编译statement,就是提前在构建这个对象的时候就把sql语句编译好了,然后再替换好值当把sql发送到数据库的时候就不用再编译了,而是直接执行,就不牵扯一个拼接sql的问题了
Statement在构建对象的时候没有编译sql,然后拼接好值发送给数据库,数据库先对sql进行编译,编译的过程就是拼接sql语句,那么就是典型的注入式漏洞
三,数据库结果集元数据
说白了就是输出这个表头。
四,属性配置文件 properties
就是把加载,连接造车放到一个属性配置文件中,方便以后该。