1.推薦使用preparedStatement
- 1.編碼更加簡便
statement方式
該方式比較麻煩 而且有字符串的拼接
String name ="zs";
int age =23;
String sql="insert into student (stuno,stuname) values('"+name+"',"+age+")";
stmt.executeUpdate(sql);
preparedStatement方式
String sql ="insert into student(stuno,stuname)values(?,?)";
pstmt =connection.prepareStatement(sql); //預(yù)編譯sql
pstmt.setString(1,name);
pstmt.setInt(2,age);
pstmt.executeUpdate();
- 2.提高性能(有預(yù)編譯操作)
需要重復(fù)增加100次
stmt.executeUpdate(sql); //執(zhí)行100次編譯100次 效率低
pstmt.exectuUpdate();//提前編譯好了
- 3.安全(有效防止sql注入)
分析:
//stmt:有被sql注入的風(fēng)險 例如:輸入用戶名:任意值 or 1=1-- 密碼:任意值
select * from login where uname='任意值' or 1=1 --' and upwd ='任意值';
因為1=1恒真 --在sql語句里是注釋的意思 相當(dāng)于把后面的密碼注釋掉了
語句變成 select count(*) from login;有返回值,所以會登陸成功