PreparedStatement是一种支持预编译的对象,在对数据库操作的时候,我们使用比较多的是Statement对象。PreparedStatement可以对其中的SQL语句进行预编译,以下面语句为例来说明PreparedStatement对象的使用。
PreparedStatement psmt=con.prepareStatement("select bid,name,price from books where name=? and price=?");
psmt.setString(1,"ajax");
psmt.setFloat(2,32.00);
psmt.executeQuery();
首先,包含于PreparedStatement对象中的SQL语句包含一个或多个IN参数,每个IN参数用?作为占位符。该SQL语句在执行PreparedStatement psmt=con.prepareStatement("select bid,name,price from books where name=? and price=?")就将SQL语句提交给了DB
MS,并进行了预编译。
其次,对于参数的赋值和传递是通过方法setXXX来进行的,其中,第一个参数对应的是SQL语句中?的位置(从1开始),第二个参数是对应的value值,其中setXXX方法中的XXX和value值都要与数据库中该字段的类型相符,即如果数据库中name字段类型为String,则对应方法名称就为setString,其值赋值为String类型的“ajax”。
最后,调用PreaparedStatement对象的executeQuery()或executeUpdate()方法,以完成数据库的查询或更新。关于此方法有两点说明:第一方法中没有参数,这与Statement对象不同;第二在使用该方法之前一定要通过第二步对参数赋值。
网上有许多Statement与PreparedStatement的比较,其实两种方法的使用没有绝对的界限,如果一条SQL语句被多次执行,那么使用PreparedStatement对象的效率将高一些,而且也可以节约系统资源。但是如果该SQL语句仅被执行一次,或者在使用过程中虽然创建了PreparedStatement对象但是使用后就将其关闭,那么也没有什么意义。