Preparedstatement
Statement 和 PreparedStatement 的区别
1. 预编译:SQL 语句被预编译并存储在 PreparedStatement 对象中。 在真正执行前,才把参数传递给 SQL 语句,并且可以反复执行。
例子:
//1.创建 PreparedStatement,预编 sql 语句
String sql = "select * from student where id=?";//预编译 sql 语句 特点: 可以使用?临时代替需要执行参数
值
PreparedStatement stmt = conn.prepareStatement(sql);
//2.给参数赋值(让?使用真实的数据代替)
//参数一:参数序号,从 1 开始
stmt.setInt(1,2);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+"\t"+name+"\t"+gender);
}
stmt.close();
conn.close();
statement的创建:
//1.得到连接
conn = JdbcUtil.getConnection();
//2. 创建语句对象
stmt = conn.createStatement();
//3. 查询数据库得到结果集
rs = stmt.executeQuery(sql);
//4. 查看是否有结果集
if (rs.next()) {
//通过列名读取
System.out.println("欢迎您!" + rs.getString("name"));
}
else {
System.out.println("用户名或密码不正确");
}
2. 缓存: 有缓存的,使用缓存可以提升运行速度。
3. 安全性:安全性更高,没有 SQL 注入的隐患。
4. Statement 对象是在创建的时候没有 SQL 语句,执行的时候才提供 SQL 语句 PreparedStatement 在创建对象的时候就提供了 SQL 语句,执行之前提供参数,运行的时候没有 SQL 语句。
5,。 preparestatement因为预编译机制,创建的代价是大于statement的,因此在执行单条sql时,并不会比statement效率高。但由于预编译机制,在执行多条重复sql时,preparestatement效率要高于statement。