JDBC学习

 

JDBC

JDBC 2 开发的过程中,SQL99 还处在一种变化不定的情况下。现在规范已经完成了,而且数据库厂商已经采用了部分标准。所以自然地,JDBC 规范就跟着将自己与 SQL99 功能的一部分相统一。最新的 JDBC 规范已经采用了 SQL99 标准中那些已经被广泛支持的功能,还有那些在五年内可能会获得支持的功能。

1. DataSource

JDBC2.0 Optional Package中,提供了透明的连接池(Connection pooling)。

一旦配置了J2EE应用服务器后,只要用DataSource获取连接(Connection),连接池(Connection pooling)就会自动的工作。

 

如果用户希望建立一个数据库连接,通过查询在JNDI服务中的DataSource,可以从DataSource中获取相应的数据库连接。

DataSource被认为是从JNDI中获取的网络资源。

 

DataSource在池中保存的对象都实现了PooledConnection接口。

当应用程序向DataSource请求一个Connection时,它会找到一个可用的PooledConnection对象。

如果连接池空了,它就向ConnectionPoolecDataSource请求一个新的PooledConnection对象

 

通过使用 DataSource 接口 (JDBC 2.0) DriverManager (JDBC 1.0) 接口,J2EE 组件可以获得物理数据库连接对象(Connection)。要获得逻辑(合用的)连接,J2EE 组件必须使用以下这些 JDBC 2.0 合用管理器接口:

 

javax.sql.ConnectionPoolDataSource 接口,该接口充当合用的 java.sql.Connection 对象的资源管理器连接 factory。每家数据库服务器供应商都提供该接口的实现

(例如,Oracle 实现 oracle.jdbc.pool.OracleConnectionPoolDataSource 类)。

javax.sql.PooledConnection 接口,该接口封装到数据库的物理连接。同样,数据库供应商提供其实现。

对于那些接口和 XA 连接的每一个,都存在一个 XAX/Open 规范)等价定义。

 

2. ResultSet

JDBC2.0中,为了获得一个Uptatable Result,在Query语句里必须包含Primarykey,并且查询的内容里必须来自一个table

 

ava.sql.ResultSet接口中定义了三种类型的结果集

TYPE_FORWARD_ONLY

TYPE_SCROLL_INSENSITIVE   这种类型的结果集支持双向滚动

TYPE_SCROLL_SENSITIVE

 

如果要建立一个双向滚动的ResultSet,一定要在建立Statement的时候使用如下参数

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

 

3. JDBC驱动程序

连通oracle8.1.6JDBC

oracle8.1.6/lib/jdbc/*.zip copy %JAVA_HOME%/jre/lib/ext/*.jar

 

如果光copyren.jar是没有用的

4. 事务处理

本地事务

  java.sql.Connection接口可以控制事务边界(即开始和结束)。

在事务开始的时候调用setAutoCommit( false ), 而在中止事务时调用rollbackcommit()方法。这类事务叫本地事务

 

分布式事务

 但是,在特定的情况下,可能有多个客户(例如两个不同的servletEJB组件)参与了同一个事务。

 或者,客户在同一个事务中可能会执行跨越多个数据库的数据库操作。

 JDBC2.0 Optional Package JTA一起来实现分布式样事务。

 

5. 一些技巧

检索自动产生的关键字

为了解决对获取自动产生的或自动增加的关键字的值的需求,JDBC 3.0 API 现在将获取这种值变得很轻松。要确定任何所产生的关键字的值,只要简单地在语句的 execute() 方法中指定一个可选的标记,表示您有兴趣获取产生的值。您感兴趣的程度可以是 Statement.RETURN_GENERATED_KEYS,也可以是 Statement.NO_GENERATED_KEYS。在执行这条语句后,所产生的关键字的值就会通过从 Statement 的实例方法 getGeneratedKeys() 来检索 ResultSet 而获得。ResultSet 包含了每个所产生的关键字的列。清单 1 中的示例创建一个新的作者并返回对应的自动产生的关键字。

 

清单 1. 检索自动产生的关键字

 

Statement stmt = conn.createStatement();

 

// Obtain the generated key that results from the query.

 

stmt.executeUpdate("INSERT INTO authors " +

 

           '(first_name, last_name) " +

 

           "VALUES ('George', 'Orwell')",

 

           Statement.RETURN_GENERATED_KEYS);

 

ResultSet rs = stmt.getGeneratedKeys();

 

if ( rs.next() ) {

 

    // Retrieve the auto generated key(s).

 

    int key = rs.getInt();

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值