第三步:使用PreparedStatement。
1、总结第一次出现本不应该查出数据却获得所有数据的原因是Statement对象会将整个sql当作原生语句执行它没有区分变量和sql的能力。
2、借助于java.sql.PreparedStatement填充变量,其会将变量当做值去执行sql,而不会将其当做sql执行,并且有预编译功能查询效率更高。
public static void testPreparedStatement(){
String name = "'zhan' or 1=1";
String sql = "select * from test where name = ?";
Connection conn = getConnection();
try {
pst = conn.prepareStatement(sql);
pst.setObject(1, name);
ResultSet rs = pst.executeQuery();
while(rs.next()){
System.out.println("id:"+rs.getString("id")+" name:"+rs.getString("name")+" age"+rs.getString("age")+" sex:"+rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3、执行测试,查询结果为空