在基本访问数据库的步骤中提到了用Statement去执行SQL语句。这里介绍Statement的子类PreparedStatement
PreparedStatement(预处理执行语句)相比其父类Statement主要有以下几个优点:
●可以防止SQL注入
●在特定的驱动数据库下相对效率要高
●不需要频繁编译。因为已经预加载了
它有三种执行方式:
●pstm.executeUpdate()执行更新语句, 例如insert, update, delete语句, 返回受影响的行数
●pstm.executeQuery()执行查询语句, 返回得到的结果集
●pstm.execute()可以执行任意的SQL语句,如果数据库返回的第一 个结果是果集,则方法返回
true,如果返回的数字,即受影响行数或者没有返回值,则方法返回false
我们发现和Statement用法类似,在PreparedStatement中我们可以设定参数,并且可以防止SQL注入的攻击
例子
4:使用Statement访问数据库
PreparedStatement ps = conn. prepareStatement(sql);
//4.2:赋值
ps.setInt(1,2);
5:使用ResultSet或者int 接收访问数据库的反馈结果
ResultSet rs = ps. executeQuery();
事务处理
默认情况下,当我们获取一个conn连接时,这个连接默认是自动提交的,也就是说,我们每执行一条sq|l语句, 均当作一个完整的独立的事务 被执行,每一个statement execute()方法的调用都是如同一条新的begin transaction命令开始,并由一条commit命令 来提交结束。我们可以通过connection的getAutoCommit