6. sql注入问题:
1. 说明:使用者可以给程序传入一些sql的片段来达到破坏sql语句的功能
2. 解决方式:使用PreparedStatement
7. PreparedStatement:
1. 与Statement的比较:
1. 是Statement的子接口,可以解决sql注入问题
2. 是预先编译的sql,当语句没有错误时才完成编译,多次执行时只需要编译一次,因此执行多次相同的sql语句时性能更好
3. 可以处理更多的数据类型
2. 使用步骤:
1. 创建PreparedStatement:
String sql="select * from _user where userName=? and pwd=?";
PreparedStatement ps=conn.prepareStatement(sql);
2. 给ps的点位赋值,索引从1开始,例如:
ps.setString(1, 'cyz');
ps.setInt(96);
ps.setDate(date);
3. 执行ps,可以使用execute,executeUpdate,executeQuery,例如:
ps.executeQuery(); //通常在查询时,有查询条件
ResultSet rs=ps.executeQuery();
ps.executeUpdate();
ps.execute(); //使用时execute()的()中不能有任何语句,否则会当作Statement处理
8. JDBC的事务控制:
1. 使用情况:当完成一个功能需要多个操作时一定要用到事务
2. 作用:防止出现异常时,同一个功能中的某些操作成功了,某些失败了,如:A给B转账,A的钱没有了B却还没转过来
3. 前提:关闭自动提交,改为手动提交
4. 语法:
conn.setAutoCommit(false); //设置为手动提交,一般写在获得连接语句的后面
conn.commit(); //提交事务
conn.rollback(); //回滚事务,一般写在catch语句中