`
feigme
  • 浏览: 155156 次
  • 性别: Icon_minigender_1
  • 来自: 球面世界
社区版块
存档分类
最新评论

JDBC2/3.0的特征点滴

阅读更多

最近写程序已经很少直接用JDBC了,一直都是用ibaits, Hibernate等来招呼,因为现在的集成框架已经很稳定了。不过对JDBC的直接使用还是不可以忽略的,JDBC3.0提供的n多的新特征还是要熟悉了解的,以前学jdbc的时候就是上网找些demo和介绍来学,使用很单一,对JDBC3.0的好多新的特征都忽略了,比如下面一个例子:

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE username='aa'");
stmt.executeUpdate("UPDATE user SET lastdatetime=now() where username='aa'");

这是一个用户登录时,经常用到的代码,先是根据用户名aa查找该用户的详细信息,然后再更新该用户的最后登录时间(lastdatetime)。这这个里面,我们用了两个sql语句,这个是我一直用的方法,但是如果用JDBC2.0给我们提供的便利,我们只要写一条sql就够了,其他的都交给jdbc,看下面的代码:

Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs2 = stmt.executeQuery("SELECT * FROM user WHERE username='aa'");
rs2.next();
rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis()));
rs2.updateRow();

这里面最主要的特征就是ResultSet.TYPE_FORWARD_ONLY和ResultSet.CONCUR_UPDATABLE,通过初始化Statement时传不同的参数,可以对ResultSet进行不用的错作限制。con.createStatement的时候,有三种可以掉用的函数:

1、createStatement();
2、createStatement(int resultSetType, int resultSetConcurrency)
3、createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

其中resultSetType可选值是:
   1、ResultSet.TYPE_FORWARD_ONLY  在ResultSet中只能先前移动游标,
   2、ResultSet.TYPE_SCROLL_INSENSITIVE 在ResultSet中可以随心所欲的先前向后移动游标,
   3、ResultSet.TYPE_SCROLL_SENSITIVE 在ResultSet中可以随心所欲的先前向后移动游标,同时ResultSet的值有所改变的时候,他可以得到改变后的最新的值
其中resultSetConcurrency可选值是:
   1、ResultSet.CONCUR_READ_ONLY  在ResultSet中的数据记录是只读的,可以修改
   2、ResultSet.CONCUR_UPDATABLE  在ResultSet中的数据记录可以任意修改,然后更新会数据库
其中resultSetHoldability可选值是:
   1、ResultSet.HOLD_CURSORS_OVER_COMMIT 表示修改提交时,不关闭ResultSet的游标
   2、ResultSet.CLOSE_CURSORS_AT_COMMIT  表示修改提交时,关闭ResultSet的游标

对于查询操作第一种初始化方法createStatement(),相当于第二种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY),第三种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT)

下面写一段demo的代码,我把一些特征函数都用出来,但是只是用来查考和说明名灵活性的。

 Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
 ResultSet rs2 = stmt.executeQuery("SELECT * FROM user");
 rs2.next();
 rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis()));
 rs2.updateRow();
 rs2.afterLast();
 while(rs2.previous()){ /**....*/ }
 rs.beforeFirst();
 while(rs2.next()){  /**....*/ }
 rs.last();
 rs.first();
 rs.absolute(5); //游标移动到第5条
 rs.absolute(-1);  //游标移动到最后一条
 rs.relative(-5);  //游标向上移动5条
 rs.relative(2);   //游标向下移动2条
 rs.deleteRow(); //删除当前行
 rs.last();  //游标移动到最后
 rs.updateString("summary", "This is ..."); //设置更新的字段值
 rs.cancelRowUpdates();  //取消刚才输入的更新
 rs.getRow(); //得到当前行号
 rs.moveToInsertRow();  //游标移动到要新增的那条记录上
 rs.updateInt("id", 1);
 rs.updateString(2, "my name");
 rs.insertRow(); //插入新记录


JDBC2.0提供的还有一个功能就是数据库的批量操作:

  con.setAutoCommit(false);
  Statement stmt3 = con.createStatement();
  stmt3.addBatch("insert .....");
  stmt3.addBatch("insert .....");
  int[] rows = stmt3.executeBatch();
  con.commit();

但是有一点要注意,stmt3.executeBatch()他不会自动给你回滚数据操作,当你有5条update语句的时候,如果第三条发生错误,那么将无法自动回滚前两条update语句的影响,所以一定要自己手工进行事务管理。

在您的事务中使用 Savepoint
JDBC3.0中最令人兴奋的附加特点就是 Savepoint 了。有时候需要的是对事务多一点的控制,而不是在当前的事务中简单地对每一个改变进行回滚。在JDBC3.0下,您就可以通过 Savepoint 获得这种控制。Savepoint 接口允许您将事务分割为各个逻辑断点,以控制有多少事务需要回滚。看下面的代码:

conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate( "INSERT INTO authors (first_name, last_name) valueS(′Lewis′, ′Carroll′)");
Savepoint svpt = conn.setSavepoint("NewAuthor");
try{
 rows = stmt.executeUpdate( "UPDATE authors set type = ′fiction′ WHERE last_name = ′Carroll′");
}catch(Exception e){
 conn.rollback(svpt);
 rows = stmt.executeUpdate( " update .......... other sql ");
}
conn.commit();

上面代码显示,当UPDATE authors失败的时候,系统事务回滚UPDATE authors的sql的影响,而INSERT INTO authors的sql仍然有效


检索自动产生的关键字
为了解决对获取自动产生的或自动增加的关键字的值的需求,JDBC 3.0现在将获取这种值变得很轻松。要确定任何所产生的关键字的值,只要简单地在语句的 execute() 方法中指定一个可选的标记,Statement.RETURN_GENERATED_KEYS和Statement.NO_GENERATED_KEYS。在执行这条语句后,所产生的关键字的值就会通过从 Statement 的实例方法 getGeneratedKeys() 来检索 ResultSet 而获得。ResultSet 包含了每个所产生的关键字的列。看下面代码:

Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO authors (first_name, last_name) valueS (′George′, ′Orwell′)", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
if ( rs.next() ) {
 int key = rs.getInt();

 



分享到:
评论

相关推荐

    sqljdbc4-3.0.jar

    标题“sqljdbc4-3.0.jar”指向的是一个特定版本的Microsoft SQL Server JDBC驱动程序,它是用于在Java应用程序中连接和操作SQL Server数据库的桥梁。这个版本的驱动(3.0)支持与SQL Server 2000的兼容性。 在描述...

    sql.rar_MySQLConnection_sqljdbc4-3.0.jar

    2. **sqljdbc4-3.0.jar**: 这是微软为SQL Server开发的JDBC 4.0兼容驱动,版本为3.0。JDBC 4.0是JDBC API的一个增强版本,增加了对Java SE 6的支持。这个驱动让Java开发者能够利用JDBC API与SQL Server进行数据...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    首先,JDBC Driver 3.0分为四种类型:Type 1、Type 2、Type 3和Type 4。在SQL Server JDBC中,我们主要关注Type 4驱动,也称为纯Java驱动。这种驱动完全用Java编写,无需依赖数据库供应商特定的库,因此具有高度的可...

    连接MS SQLSERVER 的驱动jar包sqljdbc4-3.0.zip

    本文将详细讲解如何使用“sqljdbc4-3.0.zip”这个驱动包来实现MS SQL Server的连接。 `sqljdbc4-3.0.jar`是Microsoft为Java开发人员提供的一个JDBC驱动程序,它允许Java应用程序通过JDBC API与SQL Server进行通信。...

    sqljdbc4-3.0.zip

    标题“sqljdbc4-3.0.zip”指出这是一个包含SQL Server JDBC驱动的压缩包,版本为3.0。JDBC(Java Database Connectivity)是Java语言中用于与数据库交互的一种标准接口,由Sun Microsystems(现为Oracle公司)开发。...

    SqlServer2000的驱动sqljdbc4-3.0.jar

    本文将详细讨论标题提到的“sqljdbc4-3.0.jar”驱动,它是用于连接Sql Server 2000的一个关键组件。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一套标准API,它允许Java程序通过Java...

    sqljdbc_3.0,4.0 连接sqlserver数据库使用的jar包

    2. 引入JDBC API:在Java代码中,导入所需的JDBC类,例如`java.sql.Connection`, `java.sql.DriverManager`, `java.sql.Statement`, 和 `java.sql.ResultSet`。 3. 注册驱动:使用`Class.forName()`方法注册SQL ...

    JAVA连接sqlserver2008R2驱动sqljdbc4-3.0.jar

    2. **sqljdbc4-3.0.jar**:这是SQL Server JDBC驱动的一个版本,适用于Java 6及更高版本。`4`代表了JDBC 4.0规范的兼容性,而`3.0`则是该版本的编号。这个驱动提供了连接、查询、更新和管理SQL Server 2008 R2数据库...

    SqlJDBC3.0和4.0

    **SQL JDBC 3.0与4.0:Java与SQL Server数据库交互的里程碑** Java Database Connectivity(JDBC)是Java编程语言中用于访问数据库的标准应用编程接口(API)。JDBC3.0和JDBC4.0是两个重要的版本,它们在连接Java...

    sqljdbc 3.0及4.0

    2. 设置正确的数据库连接URL,格式通常为:`jdbc:sqlserver://servername:port;databaseName=dbname;`。 3. 用户名和密码也是连接数据库必不可少的参数。 4. 使用try-with-resources语句处理数据库连接,确保资源的...

    Java连接sqlserver 的jdbc驱动,3.0和4.0

    2. **JDBC驱动3.0** JDBC 3.0是JDBC规范的一部分,对应于Java SE 5.0(JDBC 3.0在JDBC 2.0的基础上增加了许多新特性)。SQL Server JDBC驱动3.0版提供了对这些新特性的支持,包括: - 支持Statement的batchUpdate...

    Microsoft SQL Server JDBC Driver 3.0

    Microsoft SQL Server JDBC Driver 3.0下载下来,解压下来有2个jar,一个是sqljdbc,一个是sqljdbc4. 其中sqljdbc是为JDK1.5用的,而JDK1.6必须用sqljdbc4。否则出错!

    Microsoft SQL Server 2008 JDBC 3.0(微软官网下载)

    SQL Server JDBC Driver 3.0,这是一个 Type 4 JDBC 驱动程序,它通过 Java Platform, Enterprise Edition 5 及更高版本中可用的标准 JDBC 应用程序编程接口 (API) 提供数据库连接。 系统要求: •支持的操作系统:...

    sqljdbc_3.0.rar

    2. SQLJDBC 3.0特性: - 兼容性:SQLJDBC 3.0设计用于支持SQL Server 2005及以上版本,包括SQL Server 2008、2012、2014、2016、2019等,确保了广泛的后端数据库兼容性。 - 性能优化:相较于早期版本,3.0版进行了...

    sqljdbc_3.0架包

    2. sqljdbc_3.0特点: - 兼容性:sqljdbc_3.0支持与SQL Server 2000、2005、2008和2008 R2等版本的连接。 - 高性能:优化了网络传输,减少了数据在网络中的往返次数,提升了查询效率。 - 支持特性:包括JDBC 4.0...

    Microsoft JDBC Driver 3.0 for SQL Server and SQL Azure

    Microsoft JDBC Driver 3.0 for SQL Server and SQL Azure Microsoft JDBC Driver 3.0 for SQL Server and SQL Azure

    sqlserver2000JDBCdriver3.0

    SQL Server 2000 JDBC Driver 3.0 是微软为Java应用程序提供的一种数据库连接工具,它允许Java程序通过JDBC(Java Database Connectivity)接口与SQL Server 2000数据库进行交互。JDBC驱动是Java平台的标准接口,...

    sqljdbc 1.0 3.0 4.0

    标题中的"sqljdbc 1.0 3.0 4.0"指的是Microsoft SQL Server JDBC Driver的不同版本。JDBC(Java Database Connectivity)是Java编程语言中用于与数据库交互的一种标准接口,由Sun Microsystems(现为Oracle公司)...

    sqljdbc_3.0

    标题“sqljdbc_3.0”指的是SQL Server JDBC驱动程序的一个特定版本,即3.0版。这个驱动程序是微软官方发布的,用于让Java应用程序能够通过JDBC(Java Database Connectivity)接口与SQL Server 2008数据库进行交互。...

    连接sqlserver2000驱动 sqljdbc4 3.0版本

    在本场景中,我们讨论的是如何使用SQL JDBC 3.0版本驱动来连接SQL Server 2000。 首先,`sqljdbc4.jar`是微软提供的Java数据库驱动包,适用于Java 6及以上版本,它包含了连接SQL Server所需的所有类和接口。这个...

Global site tag (gtag.js) - Google Analytics