首先,我们来看一下Statement与PreparedStatement之间的区别。
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
而PreparedStatement是这样的:
pstmt = con.prepareStatement("insert into tb_name(col1,col2,col2,col4) values (?,?,?)");
pstmt.setString(1,var1);
pstmt.setString(2,var2);
pstmt.setString(3,var3);
pstmt.executeUpdate();
使用参数化查询,我们可以使得整个查询过程更加安全!不会有SQL注入的漏洞。但是参数化查询也有一个问题,那就是它有两个执行方式,一个是executeQuery(),这个方法返回的是一个ResultSet记录集,但这个记录集是不可以更新的。
另一个方法是executeUpdate(),本以为这个方法可以返回一个可供更新的记录集,但很失败,它根本就不返回记录,只返回一个整形数字。而且这个方法要求执行的语句是DML语句(比如INSERT、UPDATE或DELETE语句)或ddl语句(如Create、Alter等)。