J2EE——JDBC解说
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();
- }
- }
- }
- }