Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句。Statement每执行一次都要对传入的SQL语句编译一次,效率较差。某些情况下,SQL语句只是其中的参数有所不同,其余子句完全相同,适用于PreparedStatement。PreparedStatement是接口,继承自Statement接口。PreparedStatement 实例包含已事先编译的 SQL 语句,SQL 语句可有一个或多个 IN 参数,IN参数的值在 SQL 语句创建时未被指定。该语句为每个 IN 参数保留一个问号(“?”)作为占位符。
每个问号的值必须在(execute、 executeQuery 和 executeUpdate )语句执行之前,通过适当的setInt或者setString 等方法提供。由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
User resultUser=null; String sql="select * from t_user where userName=? and password=?"; try{ PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, user.getUserName()); pstmt.setString(2, user.getPassword()); ResultSet rs=pstmt.executeQuery(); if(rs.next())//如果该结果集中有数据,说明在数据库中已经查到数据 { resultUser = new User(); resultUser.setId(rs.getInt("id")); resultUser.setUserName(rs.getString("userName"));//rs.getString("userName")获取结果集中指定列的值 resultUser.setPassword(rs.getString("password"));// }