Java Data Base Connectivity (JDBC)
JDBC API以一种统一的方式来对各种各样的数据库进行存取。和ODBC一样,JDBC为开发人员隐藏了不同数据库的不同特性。另外,由于JDBC建立在Java的基础上,因此还提供了数据库存取的平台独立性。JDBC简而言之就是使用java访问数据库的接口,它为我们访问不同数据库提供了一个统一的形式。
JDBC4种不同的驱动程序分类:
类型 1: JDBC-ODBC Bridge
在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的,通过JDBC-ODBC桥,开发人员可以使用JDBC来存取ODBC数据源。不足的是,他需要在客户端安装ODBC驱动程序,换句话说,必须安装Microsoft Windows的某个版本。使用这一类型你需要牺牲JDBC的平台独立性。另外,ODBC驱动程序还需要具有客户端的控制权限。
类型 2: JDBC-native driver bridge
JDBC本地驱动程序桥提供了一种JDBC接口,它建立在本地数据库驱动程序的顶层,而不需要使用ODBC。 JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用。使用此类型需要牺牲JDBC的平台独立性,还要求在客户端安装一些本地代码。
类型 3: JDBC-network bridge
JDBC网络桥驱动程序不再需要客户端数据库驱动程序。它使用网络上的中间服务器来存取数据库。这种应用使得以下技术的实现有了可能,这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3种类型往往只需要相对更少的下载时间,具有平台独立性,而且不需要在客户端安装并取得控制权,所以很适合于Internet上的应用。
类型 4: Pure Java driver
第4种类型通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际上在客户端实现了2层结构。要在N-层结构中应用,一个更好的做法是编写一个EJB,让它包含存取代码并提供一个对客户端具有数据库独立性的服务。
WebLogic服务器为一些通常的数据库提供了JDBC驱动程序,包括Oracle, Sybase, Microsoft SQL Server以及Informix。它也带有一种JDBC驱动程序用于Cloudscape,这是一种纯Java的DBMS,WebLogic服务器中带有该数据库的评估版本。
JDBC规范详解
JDBC的好处
使用JDBC访问数据库的步骤
例:
import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Sqltest { private Connection conn; private Statement state; private PreparedStatement prestate; private String url; private String username; private String password; private String driver; private ResultSet result; /** * @param 服务器名 * @param 用户名 * @param 密码 * @param 驱动信息 */ public Sqltest( String url,String username, String password, String driver) { this.url=url; this.username=username; this.password=password; this.driver=driver; } /** * @return 返回连接 */ public Connection getconn() { try { Class.forName(driver); conn= DriverManager.getConnection(url,username,password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public ResultSet getStateResult(String sql) { try { state= conn.createStatement(); result= state.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } public ResultSet getPrestateResults(String sql) { try { prestate=conn.prepareStatement(sql); result=prestate.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } public static void main(String[] args) { Sqltest sqltest= new Sqltest("jdbc:sqlserver://localhost:1433;databasename=Restaurant;", "sa", "123456", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection con= sqltest.getconn(); ResultSet res= sqltest.getStateResult("select * from Foodinfo"); try { while(res.next()) System.out.println(res.getString("name")); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); try { res.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } finally{ try { sqltest.state.close(); sqltest.getconn().close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
总结