-
1 知识链接
-
2 任务实现
-
3 同步实训
【问题引入】
前面使用Statement对象执行静态的SQL语句实现了CRUD操作,但静态SQL语句比较繁琐,不灵活,易写错。为提高程序的灵活性和效率,可以通过PreparedStatement对象执行动态的SQL语句来实现。那么动态的SQL语句如何写?如何使用PreparedStatement对象处理数据呢?
【实现思路】
在获得数据库连接后,通过创建PreparedStatement对象,然后用动态SQL语句中的参数赋值,最后使用PreparedStatement对象执行增、删、查、改相关动态SQL语句实现数据操作。
【知识链接】
insert intoMESSAGE(message,author,postTime) values (?,?,?),这就是一条动态SQL语句,简洁,可读性强,使用占位符?来代替SQL语句(前面任务中使用Statement时执行的)中的参数。
Statement与PreparedStatement的用法比较如表3-12所示。
表3-12 Statement与PreparedStatement的比较
| 项目 | 使用Statement | 使用PreparedStatement |
| SQL语句 | String sql="insert into MESSAGE(message,author,postTime) values ('"+messagestr+"','"+author+"','"+new SimpleDateFormat ("yyyy-MM-dd").format(new Date())+"')"; | String sql="insert into MESSAGE(message,author,postTime) values (?,?,?)"; |
| 对象创建 | stmt=con.createStatement(); | ptmt=con.prepareStatement(sql); |
| 参数赋值 | 不需要 | 需要通过setXXX方法给参数赋值,对于不同类型的参数可以使用不同类型的setXXX方法。ptmt.setString(1,messagestr); |
| 执行 | 增、删、改操作: stmt.executeUpdate(sql); 查询操作: stmt.executeQuery(sql); | 增、删、改操作: ptmt.executeUpdate(); 查询操作: ptmt.executeQuery(); |
| 用法复杂 | 简单 | 复杂 |
| 适用情况 | 单次执行 | 重复执行多次 |

