PreparedStatement防止sql注入
在之前的一篇文章当中,写了java jdbc,mysql数据库连接的一篇文章,文章中包含了对于mysql的增改删查操作Java jdbc Mysql数据库连接 。
今天补充一个PreparedStatement防sql注入的一个写法。
使用createStatement获取数据库操作对象,然后紧接着使用executeQuery(sql),直接传递sql语句,会有sql注入的风险,要是别人在传递的参数值处填写sql语句,会影响安全性能。(当然也可以通过写正则表达式来判读用户传入的数据的合法性)。
接下来开始了解一下PreparedStatement的使用方法。
PreparedStatement的作用:
预编译SQL并执行SQL语句。
使用方法
①获取PreparedStatement对象
//Sql语句中的参数值用?代替
String sql = "select * from user where user = ? and password=? ;"
//通过connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.preparedStatement(sql);
②设置参数值
PreparedStatement对象.setXxx(参数1,参数2);//给?赋值
`//其中,Xxx是数据类型
//参数1:?的位置编号,从1开始计
//参数2:?的值`
示例代码(给?赋值)
pstmt.setString(1,"zhangsan");
pstmt.setString(2,"123456");
③执行SQL
executeQuery()
或
executeUpdate()
//不需要再传递sql语句