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();
}
}
}