- 浏览: 387748 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (314)
- java (132)
- 生活 (13)
- javase模式 (6)
- weblogic (4)
- jquery (5)
- sql (21)
- ecside (1)
- el (3)
- css (5)
- spring (7)
- ireport (2)
- linux (14)
- struts2 (2)
- jstl (1)
- rmi (1)
- rose (9)
- js (6)
- swing (4)
- webservice (1)
- jboss (1)
- ejb3 (2)
- xml (1)
- 线程 (9)
- socket (3)
- jms (2)
- tomcat (10)
- 领域驱动 (3)
- json (3)
- 权限 (2)
- jvm (1)
- 书籍 (1)
- eclipse RCP (0)
- 数据库设计 (10)
- 软件分析建模 (5)
- 分析建模 (3)
- hibernate jpa (5)
- Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等 (1)
- 项目管理 (2)
- 财务 (0)
- oracle (2)
- 需求 (2)
- rcp gef (0)
- c++ (1)
- hadoop (2)
- BIGDATA (3)
- c (6)
最新评论
-
lh_kevin:
...
jpa 注解 -
一别梦心:
你好,我也遇到此问题了。就你贴的那段代码,你说了两种解决方式, ...
Hibernate的Antlr在Weblogic中产生Jar冲突的历史缘故以及解决办法 -
fireinjava:
...
el表达式 -
宋建勇:
...
JSON: property "xxx" has no getter method in class "..." -
handawei:
有道理,jpa是orm框架的java标准,它关注的是对象到关系 ...
jpa 注解
JDBC可滚动可更新感知更新结果集
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
|
JDBC可滚动可更新感知更新结果集
JDBC的结果集有很多类型。这些结果集有不同的特性,以满足各种需要。这在高性能的JDBC数据操作中有着重要应用。下面是一个应用实例:
一、测试代码
package lavasoft.common;
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * JDBC可滚动可更新感知更新结果集测试 * * @author leizhimin 2009-12-8 20:09:03 */ public class TestResultSet { public static void main(String[] args) { testScrollResultSet(); testUpdateResultSet(); } /** * 可更新结果集更新测试 */ public static void testUpdateResultSet() { Connection conn = DBToolkit.getConnection(); String sql = "SELECT * FROM book"; try { Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(sql); System.out.println("---------原结果集--------"); while (rs.next()) { System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } System.out.println("---------插入一条记录--------"); rs.first(); //将光标移动到插入行上 rs.moveToInsertRow(); //构建行数据 rs.updateString(2, "xxxx"); rs.updateString(3, "x"); //插入一行 rs.insertRow(); System.out.println("-------------更新一条记录-------------"); rs.absolute(3); //构建行数据 rs.updateString(2, "uuuu"); rs.updateString(3, "u"); rs.updateRow(); System.out.println("---------插入更新后的结果集--------"); rs = stmt.executeQuery(sql); while (rs.next()) { System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } finally { DBToolkit.closeConnection(conn); } } /** * 可滚动结果集滚动测试 */ public static void testScrollResultSet() { Connection conn = DBToolkit.getConnection(); String sql = "SELECT * FROM book"; try { Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } System.out.println("------前滚操作-----"); //将光标移动到此 ResultSet 对象的上一行 rs.previous(); rs.previous(); System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); System.out.println("------绝对定位-----"); //将光标移动到此 ResultSet 对象的给定行编号。 rs.absolute(3); System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); System.out.println("------移动到第一行-----"); //将光标移动到此 ResultSet 对象的第一行。 if (rs.first()) { System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } System.out.println("------移动到最后一行-----"); //将光标移动到此 ResultSet 对象的第一行。 if (rs.last()) { System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } System.out.println("------移动到第一行之前-----"); //将光标移动到此 ResultSet 对象的开头,正好位于第一行之前 rs.beforeFirst(); rs.next(); System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); System.out.println("------移动到最后一行之后-----"); //将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。 rs.afterLast(); rs.previous(); System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); System.out.println("------相对当前行做移动-----"); rs.relative(-2); System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } finally { DBToolkit.closeConnection(conn); } } } 控制台输出:
[行号:1] 1 aaa a
[行号:2] 2 bbb b [行号:3] 3 ccc c [行号:4] 4 ddd d [行号:5] 5 eee e [行号:6] 6 fff f [行号:7] 7 ggg g [行号:8] 8 hhh h ------前滚操作----- [行号:7] 7 ggg g ------绝对定位----- [行号:3] 3 ccc c ------移动到第一行----- [行号:1] 1 aaa a ------移动到最后一行----- [行号:8] 8 hhh h ------移动到第一行之前----- [行号:1] 1 aaa a ------移动到最后一行之后----- [行号:8] 8 hhh h ------相对当前行做移动----- [行号:6] 6 fff f ---------原结果集-------- [行号:1] 1 aaa a [行号:2] 2 bbb b [行号:3] 3 ccc c [行号:4] 4 ddd d [行号:5] 5 eee e [行号:6] 6 fff f [行号:7] 7 ggg g [行号:8] 8 hhh h ---------插入一条记录-------- -------------更新一条记录------------- ---------插入更新后的结果集-------- [行号:1] 1 aaa a [行号:2] 2 bbb b [行号:3] 3 uuuu u [行号:4] 4 ddd d [行号:5] 5 eee e [行号:6] 6 fff f [行号:7] 7 ggg g [行号:8] 8 hhh h [行号:9] 9 xxxx x Process finished with exit code 0 产生Statement对象最复杂的方法就是下面这个方法了:
二、详解构建Statement对象的方法参数
此方法来自于Connection接口:
Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。此方法与上述 createStatement 方法相同,但它允许重写默认结果集类型、并发性和可保存性。 resultSetType - 以下 ResultSet 常量之一:ResultSet.TYPE_FORWARD_ONLY 、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE resultSetConcurrency - 以下 ResultSet 常量之一:ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE resultSetHoldability - 以下 ResultSet 常量之一:ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象 上面方法参数有三个,形成三组:
1、结果集类型:设置是否滚动,以及设置滚动结果集是否感知数据的更新。
ResultSet.TYPE_FORWARD_ONLY:只能向前
ResultSet.TYPE_SCROLL_INSENSITIVE :可滚动,不感知数据变化。ResultSet.TYPE_SCROLL_SENSITIVE 可滚动,并感知数据变化。2、并发性:设置是否允许更新。
ResultSet.CONCUR_READ_ONLY:只读
ResultSet.CONCUR_UPDATABLE :可更新3、可保存性:设置提交时候是否关闭结果集。
ResultSet.HOLD_CURSORS_OVER_COMMIT :在提交后结果集还可用
ResultSet.CLOSE_CURSORS_AT_COMMIT:在提交时候关闭结果集 由于这些特性比较高级,不同数据库驱动对此实现也不一样。因此在使用JDBC高级特性的时候最好做个测试,以保证程序的可靠性。
本文出自 “熔 岩” 博客,转载请与作者联系! |
发表评论
-
字符串,Volatile
2013-03-18 12:01 1126转载:http://www.ibm.com/de ... -
qian rushi
2012-12-01 10:13 0唐攀,华清远见高级研 ... -
110道 C语言 题目 超经典中的经典
2012-10-21 08:57 0... -
LOG4J
2012-08-07 10:34 1041long4j配置 转载:http://www.iteye. ... -
jpa 注解
2011-12-20 09:23 11835转:http://blog.csdn.net/gdweijin ... -
jna
2011-11-29 17:28 1534... -
eclipse设置
2011-11-16 08:45 867转:http://www.iteye.com/topic/11 ... -
深入分析 Java I/O 的工作机制
2011-11-14 08:57 891... -
java获得计算机信息
2011-10-29 13:03 1370采用singar.jar实现,需要将sigar-x86-win ... -
java内存机制
2011-10-24 13:01 1282转. Java内存机制详解 Ja ... -
缓存技术
2011-09-27 13:28 818一个培训的ppt,是介绍缓存知识的。有兴趣的可以参考:缓存技术 ... -
单点登录
2011-09-26 08:37 1599了解单点登录:: 可以使 ... -
继承和组合的关系
2011-08-18 09:17 911个人工作的感触: 首先框架的编写是难度很大,而工具 ... -
导入导出,创建databaselink
2011-08-10 15:56 2135pl/sql导出表结构和表 ... -
小结一下
2011-08-04 10:20 873觉得程序层面上是:数据类型(int long string) ... -
分析建模
2011-07-17 20:13 869系统建模与分析。 -
Java浮点数的精确计算
2011-06-27 16:10 994... -
异常系统
2011-05-31 17:19 716http://www.iteye.com/topic/7217 ... -
权限管理
2011-01-27 09:30 1339... -
jvisualvm
2011-01-11 21:09 916可以查看远程 本地的jvm 有两种方式 jmx jstatd ...
相关推荐
Java数据库连接(JDBC)API提供了一种方式来与各种数据库进行交互,而可滚动结果集是JDBC的一部分,它允许开发人员在结果集中向前、向后移动,甚至可以定位到特定行。这与默认的只向前滚动的结果集不同,只向前滚动...
- 创建滚动结果集,可以使用 `Statement` 的构造函数指定结果集类型,如 `createStatement(int resultSetType, int resultSetConcurrency)`。 - 结果集的滚动方法包括 `next()`, `previous()`, `first()`, `last()...
`ResultSet.CONCUR_READ_ONLY`则表示这个结果集只能被用于读取,不能进行修改。 #### 二、JDBC批量更新 **批量更新**是指一次性执行多个更新操作,比如批量更新用户信息、产品信息等。批量更新的原理与批量插入...
实现JDBC结果集的转换
Java-JDBC【之】实现ORM,结果集映射实体类(ResultSet、注解、反射) 1.ORM实现思路 2.@Table、@Column、标识实体类 2.1.创建注解 @Table、@Column 2.2.标识实体类 2.3.数据库表 3.结果集解析,注解加反射填充实体...
综上所述,当使用 JDBC 连接 Oracle 数据库并遇到字符集不同导致的乱码问题时,可以通过调整 SQL 语句的编码或结果集的编码来解决。这两种方法都可以有效地避免乱码问题的发生,但在实际应用中应根据具体情况选择最...
这两个版本的驱动都包含了必要的类和接口,允许Java应用程序执行SQL查询、处理结果集、事务管理和连接管理等任务。 描述中提到"sqlserver数据库,Driver驱动jar包,最新官方原版",意味着这些驱动是由Microsoft官方...
3. **结果集的滚动和分页(Scrollable Result Sets and Pagination)**:开发者可以前后移动结果集,实现分页查询,提升用户体验。 4. **数据源(DataSources)**:通过JNDI(Java Naming and Directory Interface)...
最直接的方法是在创建`Session`时指定查询结果集为可滚动类型(scrollable)。这可以通过在Hibernate配置文件中设置`hibernate.connection.autocommit`属性为`false`,并在查询前手动设置事务,然后通过`Session`的`...
9. **性能优化**:JDBC提供了多种优化技巧,如关闭不再需要的资源(如结果集、Statement和连接),使用连接池来重用连接,以及合理使用`PreparedStatement`避免SQL注入。 10. **JDBC API的扩展**:随着技术的发展,...
在本压缩包"impala数据库JDBC驱动集"中,我们很显然会找到用于连接和操作Impala数据库的JDBC驱动程序。 Impala的主要特点包括其并行查询执行模型,它能够快速地处理PB级别的数据,而无需将数据从HDFS或HBase中提取...
(3)掌握可滚动和可更新的结果集的基本操作方法; (4)理解JDBC中实现事务处理的基本方法; (5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法...
SAP PI 的 JDBC 适配器允许系统通过 JDBC 连接到各种数据库,执行 SQL 操作并处理结果。这些操作可以包括插入(INSERT)、更新(UPDATE)、删除(DELETE)以及查询(SELECT)。为了确保数据的一致性和准确性,需要对传入的...
1. **可滚动结果集**: 在JDBC 1.1中,结果集通常是只能向前滚动的。但在JDBC 2.0中,通过`ResultSet.TYPE_SCROLL_SENSITIVE`和`ResultSet.TYPE_SCROLL_INSENSITIVE`选项,开发者可以创建可滚动的结果集。这使得...
MySQL Connector/J是官方提供的Java驱动,它实现了JDBC API,使得Java应用程序可以通过标准的JDBC接口与MySQL数据库进行交互,如建立连接、执行SQL查询、处理结果集等。 2. **Oracle JDBC驱动**:`ojdbc14_g.jar`是...
在使用JDBC过程中,经常需要处理查询结果集`ResultSet`。`ResultSet`对象表示执行SQL语句后返回的结果集,它提供了对结果集中数据的操作方法。 **详细解析:** 1. **`ResultSet`的概念:** - `ResultSet`是一个可...
总结起来,高级JDBC教程涵盖了数据库操作的核心技术,包括SQL操作、预编译语句、事务处理、存储过程、元数据操作、可滚动和可更新的结果集、批处理更新以及大对象处理。熟练掌握这些知识,将有助于开发者更高效、...
- **可滚动结果集:** 允许前后移动光标位置。 - **可更新结果集:** 允许修改结果集中的数据,并将更改同步到数据库。 ### JDBC版本发展 - **JDBC 1.x:** 最初版本,提供了基本的数据存储架构,包括核心接口。 -...
SQLJDBC4是后续的升级版本,主要针对JDBC API 4.0规范进行了优化,增加了对Java 7的支持,包括新的JDBC功能,如批注、行集和结果集保存点等。此外,它还提高了性能和稳定性,增强了安全性,并提供了更多的数据库...
- 处理结果集,读取数据或更新数据库。 - 关闭结果集、Statement和Connection,释放资源。 在实际开发中,为了提高性能和管理连接,通常会使用连接池技术,如C3P0、HikariCP等。这些连接池管理组件可以预先初始化...