可滚动的结果集

JDBC ResultSet 可更新的结果集

泄露秘密 提交于 2020-04-09 20:32:14
接着上一篇:可滚动的结果集; 1)com.microsoft.sqlserver.jdbc.SQLServerException: 结果集不可更新。 当concurrency设置为: ResultSet.CONCUR_READ_ONLY(默认)时,结果集不能更新数据,否则会报 SQLServerException 示例: statement = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = statement.executeQuery(); rs.absolute(3);// 结果集可滚动 rs.updateString("strfeaturecode", "hwp_332"); rs.updateRow(); // 更新结果集,报错 SQLServerException System.out.println(rs.getString("virusid")+" "+rs.getString("featurecode")+" "+rs.getString("apppackage")+" "+rs.getInt("virustype")+" "); 2)com.microsoft.sqlserver.jdbc.SQLServerException:

JDBC Statement PreparedStatement CallableStatement

不羁岁月 提交于 2020-04-06 22:43:28
在 JDBC 应用程序中,JDBC 语句对象用于将 SQL 语句发送到数据库服务器。一个语句对象与一个连接相关联,应用程序与数据库服务器之间的通信由语句对象来处理。 JDBC 中有三种类型的语句对象: 1. 常规语句(General statement) 2. 预置语句(Prepared statement) 3. 可调用语句(Callable statement) 语句对象与一个连接相关联,所以要创建一个语句对象,首先应该建立一个数据库连接。连接的获取见上一篇博客。 关于这三种语句,个人觉得最有价值的就是 预置语句,下面说说为什么 1) 预置语句 可以避免sql参数注入。如果使用常规的statement,那么用户可以注入sql语句,把一个本应该是传入参数的变量变成了SQL注入变量。然而,如果使用预置语句,那么变量的值是不可能传入SQL的。这个在查询的时候如果你把条件设为 or 1=1 得到体现。 2) 预置语句 可以高效操作,原因是语句只要编译一次。对于一条模板SQL,我们可能需要执行多次,每次只是传入的参数不一样,那么如果我们使用常规语句则会每次执行时在数据库编译一次,然而,如果采用预置语句,则只会编译一次,这样效率大大提高。 3) 预置语句 可以批量操作。对于一些特殊的业务逻辑处理,我们可能会一次更新多条数据,然而如果我们每次都去获取语句执行SQL的话效率必然降低,但是