JDBC(三)

 
JDBC2.0 扩展特性 :
1.     JNDI API 的支持
2.     数据库连接池
3.     分布式事务
4.     Row set 行集
 
在了解 JNDI 之前先了解一下数据源的知识
 
以数据源的方式连接数据库 :
API:DataSource 接口 : 这个接口可以指向一个数据源对象 , 得到一个物理的数据库连接对象 , 它需要一个数据库厂家制作的实现类才能完成连接数据库的功能 , 这个实现类就是 ojdbc14.jar 包中的一个类 , 名字是 OracleDataSource
/**
 * 知识点 :
 * DataSource 数据源的数据库连接方式
 * 问题 :
 * 1. 他和 DriverManager 方式的区别
 * DataSource 是首选方式 ,DriverManager 方式性能效率比较低
 * API:
 * 数据源实现类 :OracleDataSource :
 * setDriverType();setServerName();setPortNumber();
 * setDatabaseName();ods.setUser();      ods.setPassword();
 * 程序目标 :
 * 使用 DataSource 方式建立一个数据库的连接方式
 */
package moudule1.DataSource;
import java.sql.*;
 
import oracle.jdbc.pool.OracleDataSource;
 
public class OraDataSource {
      public static OracleDataSource getOraConnection(){
            OracleDataSource ods=null;
          
           try {
                 ods=new OracleDataSource();
           } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
            ods.setDriverType("thin");
            ods.setServerName("127.0.0.1");
            ods.setPortNumber(1521);
            ods.setDatabaseName("name");
            ods.setUser("scott");
            ods.setPassword("tiger");
          
            return ods;
          
      }
      /**
       * @param args
       */
      public static void main(String[] args) {
           // TODO Auto-generated method stub
           try {
                 Connection con=getOraConnection().getConnection();
                 System.out.println(con);
           } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
      }
 
}
 
JNDI 的出现 :
现在有个问题 , 当服务器的设置信息改变的时候 , 程序员还得需要修改工厂类中的配置 , 况且有些公司是不把服务器的信息给程序员的 , 这样就出现了问题 , 那么我们通过 JNDI 可以解决这样的问题
 
什么是 JNDI?
JNDI JAVA 命名和目录的访问接口
命名服务 : 每个资源都可以设置一个名字 , 可以根据一个命名查找对象 , : 查找 , 起名 : 绑定比如说 : 一个文件夹等等 , 这样我再找这个文件夹的时候
也可以绑定多个对象 , 比如说 : 一个文件夹中里面可以存放多个文件
 
在这里我们先看如何解决服务器设置信息隐藏的能力 :
 
引例 : moudule1.jndi.BindDataSource.java  服务器端运行的目录服务器
       moudule1.com.ConnectionFactory.java  通过目录名字得到数据源
       moudule1.resultSet20.youbiao. ResultSetScroll.java  测试 jndi
 
 
 
 
数据库链接池 :
就是一个池子 , 这里面存放的是数据库连接对象 , 你要用 , 就从池子里拿过去用 , 不用了 , 就放回去 , 好处就是提高了性能
 
分布式事务 :
就是一个事务访问多个数据库 , 那么如何实现提交和回滚的正确操作 , 就是分布式事务编程 (JTA 事务 , 事务管理器编程 )
 
RowSet 行集 :
RowSet 接口 , ResultSet 的子接口 , 也是取结果集的
作用 : 从数据库中得到数据存放在内存中 , 基于属性的设置 , 我们可以通过网络传递这个结果集 , 我们把这种结果集叫做行集
它也需要实现类 ,ocrs12.jar : 这个包是由 oracle 提供的 , 不用注册驱动程序了
rowset.jar : sun 公司提供的实现类 , 优点就是通用 , 缺点就是必须注册驱动程序
/**
 * 知识点 :
 * RowSet 行集
 * API:
 * RowSet 接口 :
 * 1.setUrl(string url): 创建供数据库连接使用的 url
 * 2.setUsername(String username): 设置数据库的用户名
 * 3.setPassword(String password): 设置数据库的密码
 * 4.setCommand(String sql): 设置要执行的 sql 语句
 * 5.execute(): 执行 sql 语句
 * 6.next(): 移动游标
 * OracleCachedRowSet:oracle 公司为 rowset 提供的实现类
 * 程序目标 :
 * 使用 RowSet 行集连接数据库并读取数据
 */
package moudule1.RowSet;
 
import java.sql.SQLException;
 
import javax.sql.RowSet;
 
import oracle.jdbc.rowset.OracleCachedRowSet;
 
public class OracleRowSetTest {
 
      public static void main(String[] args) {
            RowSet rs=null;
           try {
                 rs=new OracleCachedRowSet();
                 rs.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:name");
                 rs.setUsername("scott");
                 rs.setPassword("tiger");
                 rs.setCommand("select * from yuchen_user");
                 rs.execute();
                
                 while(rs.next()){
                       System.out.print("id:"+rs.getInt(1));
                       System.out.print("name:"+rs.getString(2));
                 }
           } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
      }
 
}
 
/**
 * 知识点 :
 * SunRowSet: 行集
 * API:
 * CachedRowSetImpl:sun 公司提供的通用实现类 , 需要注册驱动
 * 需要两个包 : 一个是所使用数据库的驱动 , 一个是 rowset 实现类 (sun)
 * 程序目标 :
 * 使用 sun 公司的实现类来实现 RowSet 行集
 */
package moudule1.RowSet;
import java.sql.SQLException;
 
import javax.sql.*;
 
import com.sun.rowset.CachedRowSetImpl;
public class SunRowSetTest {
 
      public static void main(String[] args) {
            RowSet rs=null;
           try {
                 Class.forName("oracle.jdbc.driver.OracleDriver");
                 rs=new CachedRowSetImpl();
                 rs.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:name");
                 rs.setUsername("scott");
                 rs.setPassword("tiger");
                 rs.setCommand("select * from yuchen_user");
                 rs.execute();
                
                 while(rs.next()){
                       System.out.print("id:"+rs.getInt(1));
                       System.out.println("name:"+rs.getString(2));
                 }
           } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           } catch (ClassNotFoundException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
      }
 
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值