JDBC解决SQL注入问题

我们在通过JDBC执行SQL语句时,为了避免SQL注入,可以用PrepareStatement来代替Statement来获取数据库操作对象,这两个接口的区别如下(如果对JDBC基础操作不熟悉,可参考我的另一篇文章

  • Statement接口:
    先进行字符串的拼接,再进行SQL语句的编译,这就给到了不法分子可乘之机
  • PrepareStatement接口:
    先进行SQL语句的预编译,再进行传值操作,可以有效避免SQL注入问题
Statement state = con.createStatement();
String sql = "select * from student where name='java'";
ResultSet res = state.executeQuery(sql);//执行查找语句后返回一个ResultSet

我们可以将以上代码改成如下:

String s = "java";
String sql = "select * from student where name='java'";//这里的?没有加引号,代表占位符
PrepareStatement state = con.prepareStatement(sql);
sql.setString(1,s);//这里的1代表第一个占位符,s将传入这个位置,可以根据数据类型变成setInt等方法
res = state.executeQuery();//这里不需要传入sql语句

注意占位符传入的必须为值,不能为关键字,如上述student为表明,不可用占位符传值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值