java查询数据库数据时,常用的是PreparedStatement,PreparedStatement实现了Statement接口,所以它是Statement功能的扩展。我们没有必要在每次开始一个查询时都建立新的查询语句,而是准备一个带有宿主变量的查询语句,每次查询只需为该变量填入不同的字符串就可以反复多次的使用该语句。
每个宿主变量都用“?”,如果存在一个以上的变量,那么在设置变量值时必须注意“?”的位置。如果一个查询语句sql在Statement中生成ResultSet,sql查询语句的类型安全不足,它绕过编译器直接送到数据库编译执行。
String sql = "select * from students where name = ?";
由于跟Statement接口的关系,它的生成方式也不同。该sql语句直接在数据库编译
PreparedStatement ps = conn.prepareStatement(sql);
设置宿主变量,在ps对象中缓存;要查询另一位同学时,需要对宿主变量重新设置。
ps.setString(1, "xiaoming");
把参数传入数据库,并运行
ps.executeUpdate();
许多数据库驱动程序通常会自动缓存预备语句,如果要执行两次相同的查询,数据库通常会直接重用查询策略,因此,无需过多考虑调用PreparedStatement的开销。
有些程序猿不喜欢用复杂的sql语句去得到结果集,而是使用大量的代码去遍历多个结果集,但是这种方法效率非常低。既然数据库也是一个程序,为什么我们不让他来为我们分担一点呢,一般而言,可以使用SQL解决的问题,就不要使用Java程序。