简单来说,prepareStatement 提供预编译SQL语句,可以用"?" 来替换需要改变的参数值,类似于正则化 SQL查询语句。
createStatement则不提供预编译SQL,需要实时executeQuery(sqlStr) 来访问数据库。 因此,prepareStatement可以多次使用,提高访问数据库的效率。
具体可以参考:http://blog.csdn.net/jiangwei0910410003/article/details/26143977
Code Fragment 1:
- String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERECOF_NAME LIKE ′Colombian′";
- stmt.executeUpdate(updateString);
Code Fragment 2:
- PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SETSALES = ? WHERE COF_NAME LIKE ? ");
- updateSales.setInt(1, 75);
- updateSales.setString(2, "Colombian");
- updateSales.executeUpdate();
然而,prepareStatement 也有局限性,并不能修改类似表名。
- PreparedStatement updateSales = con.prepareStatement("SELECT * FROM ? WHERE COF_NAME LIKE ? ");
- updateSales.setInt(1,"TableName");
- updateSales.setString(2, "Colombian");
- ResultSet rs = updateSales.executeQuery();
会报错,
SQL查询语句为“SELECT * FROM ‘TableName’ WHERE COF_NAME LIKE ‘Colombian’ ”