JDBC(java DataBase Connectivity),关于概念这里不再赘述,重点学习java的链接数据库的具体操作。
从大的方面说,JDBC提供了两种访问数据库的方式:两层和添加一层WebLogicServer。
两层的方式有:
1.JDBC_ODBC Bridge (2层)基于原有的odbc的数据库连接;
2.JDBC-Native Bridge(2层) 基于本地的,需要在本地安装客户端;
3.All Java JDBC Driver:(2层)Java的原生态连接,不需要安装客户端,跨平台
三层的方式有:
4.JDBC-Net Bridge:(3层)基于NetWork Server(WLS),屏蔽平台,往往先连接到Weblogic
然后再调用2层的方法来连接
一、使用JDBC直接访问数据库:
import java.sql.*;
try{
//连接的数据库类型
class.forName("com.pointbase.jdbc.jdbcUniversalDriver");
//数据库的实例
Connection con = DriverManager.getConnect("jdbc:pointbase://server:port/MyDataBase");
//建立会话
Statement stmt = con.createStatement();
//相关查询语句和对查询结果的操作
String sql="SELECT * FROM MYTABLE";
ResultsSet res = stmt.executeQuery(sql);
while(res.next()){
String col1 = res.getString("MYCOLUMN1");
int col2 = res.getInt("MYCOLUMN2");
……
}
}catch(Exception e){
}
二、使用datasource连接数据库:
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
try{
Context ctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup("TestDataSource");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
String sql ="SLEECT * FROM MYTABLE";
ResultSet res = stmt.executeQuery(sql);
While(res.next()){
String col1 = res.getString("MYCOLUM1");
.........
}
}catch(Exception e){
}
使用datasource连接数据库的一个好处是,引用了jndi目录查找服务,可以事先在容器中配置已经连接的实例,这样可以直接使用,相当于预先实例化,相对于jdbc效率要高一些。
使用多层的访问方法,必须至少配置一个连接池(Connection Pool)和一个数据源(DataSource),连接数由netserver来管理,如:最大连接数、排队等。
使用数据源和连接池有什么好处呢?
数据源:
1.DataSource客户端通过jndi的lookup方法找到一个DataSource,
2.DataSource从ConnectionPool中查找空闲的链接,返回给客户端
3.可以配置是否支持分布式事务
连接池:
1.消除频繁建立连接所需的负载
2.管理数据库连接
3.提供可共享、安全的链接
4.初始化时和最大的链接数目,每次现有连接使用完后建立新连接的个数
四、Prepared Statement和Statement的比对:
使用Prepared Statement(批量,预编译,效率会高些)比Statement优越的地方是:Prepared Statement 批量,预编译,效率会高些。
Statement示例:
Statement stmt =con.createStatement();
String sql = "SELECT * FROM MYTABLE";
ResultSet res = stmt.excuteQuery(sql);
PreparedStatement示例:预编译String sql="SELECT * FROM MYTABLE WHERE COL1=? AND COL2=?";
PreparedStatement pStatement =con.prepareStatement(sql);
pStatement.setString(1,searchVariableString);
pStatement.setInt(2,searchVariableInt);
ResultSet rs = pStatement.ExecuteQuery();
总结:
在java中提供了多种对数据库的连接方式,满足不同的机器环境需求,当然这对跨平台是很重要的。同样的缓冲池的思想也充分的使用,提高了性能,这里感觉比较新颖的是PreparedStatement预编译的使用。
注:这里没有对Connection Pools和datasource的配置做说明。