随着电子商务及动态网站的迅速发展,Java 网络数据库编程得到了越来越广泛的应用。
JDBC由一组用Java语言编写的类组成,它已成为一种供数据库开发者使用的标准API。通过JDBC本身提供的一系列类和接口,Java 编程开发人员能够很方便地编写有关数据库方面的应用程序。
JDBC简介
JDBC(Java Database Connectivity) 是Java 实现数据库访问的API(Application Programming Interface),与Microsoft 的ODBC(Open Database Connectivity) 一样,JDBC是建立在X/Open SQL CLI(Call Level Interface)基础上的。JDBC的主要功能是管理存放在表中的数据,所以它定义了一系列与关系数据库进行交互的类和接口,如数据库连接、SQL 语句、结果集和元数据等。
一般来说,JDBC 的工作主要分为3个步骤:首先与某一关系数据库建立连接;然后向数据库发送SQL 语句,实现对数据库的操作;最后取得处理结果。
实现上述JDBC基本功能的3个步骤程序示例如下:
...........
connection con=DriveManager.GetConnection("jdbc:odbc: ghq,"root","password"):
//建立与数据库的连接
Statement stmt=con.createstatement(); //建立语句对象
ResultSet rs=stmt.executeQuery("SELECT a,b FROM Table")
//运行SQL语句,返回数据库操作结果
while (rs.next()){
int x=getInt("a"); //获得数据库表记录a项的值
string s=getstring("b"); //获得数据库表记录b项的值
}
.............
JDBC 接口和驱动程序
1.JDBC 接口
JDBC提供的接口主要有两种,一种是面向一般应用程序开发人员的JDBC API,另一种是底层的JDBC Driver API,如图1所示。
图1 使用JDBC的基本结构
JDBC API是一系列抽象的接口,应用程序开发人员通过它可以编写访问数据库的Java应用程序。JDBC API中,抽象类的实现是由驱动程序开发商提供的。驱动程序实现了应用程序和某个数据库产品之间的接口,它的管理器则对应用程序和驱动程序之间的交互进行控制。JDBC API主要用来连接数据库和直接调用SQL命令,执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句,以及带IN和OUT参数的存储过程。
JDBC中的驱动程序必须提供实现方法的接口。JDBC API被定义在java.sql包中,其中定义了JDBC API用到的所有类、接口和方法,主要的类和接口有:
· DriverManager类——处理驱动程序的装入,为新的数据库连接提供支持。驱动程序要向该类注册后才能被使用。进行连接时,该类根据JDBC URL选择匹配的驱动程序。
· java.sql.Driver接口——驱动程序接口,负责确认URL与驱动程序的匹配、建立到数据库的连接等,其中的方法需要有相应的驱动程序实现。
· java.sql.Connection接口——表示到特定数据库的连接,其中的方法需要有相应的驱动程序实现。
· java.sql.Statement接口——为SQL语句提供一个容器,包括执行SQL语句、取得查询结果等方法。此接口有两个子类型:
(1)java.sql.PreparedStatement,用于执行预编译的SQL语句;
(2)java.sql.CallableStatement,用于执行对一个数据库内嵌过程的调用。
· java.sql.ResultSet接口——提供对结果集进行处理的手段。
JDBC Driver API 是面向驱动程序开发商的接口。对于大多数数据库驱动程序来说,仅仅实现JDBC API提供的抽象类就可以了。也就是说每一个驱动程序都必须提供对于java.sql.Connection、java.sql.Statement、java .sql.PreparedStatement和java.sql.ResultSet等主要接口的实现方法。如果目标DBMS提供有OUT参数的内嵌过程,那么还必须提供java.sql.CallableStatement 接口。每个数据库驱动程序必须提供一个java.sql.Driver类,使得系统可以由 java.sql.DriverManager来管理。
一个典型的驱动程序是在ODBC上提供对JDBC的实现接口,从而提供与ODBC接口的JDBC-ODBC桥,就像前面图1所显示的。由于JDBC放在ODBC之后,所以实现起来简单而且高效。
2. JDBC 驱动程序
JDBC驱动程序可以分为下面四种类型,分别适用于不同的场合,如图2所示。
图2 驱动程序的4种类型
· JDBC-ODBC桥驱动程序
Sun产品通过ODBC驱动程序提供JDBC的存取,即经过ODBC 驱动程序访问数据库。在大多数情况下,ODBC二进制代码必须在每个使用该数据库驱动程序的客户端安装,所以这种驱动程序主要适用于公司内部网络,或者在三层结构中用Java编写的应用服务器代码。
下面以Access数据库为例来具体说明,代码如下:
..........
Class.forname(" sun.jdbc.odbc.JdbcOdbcDriver ");//调用JDBC-ODBC 驱动程序
Connection con=DriverManager.getConnection("jdbc:odbc:temp,"sa","");
//与数据库连接,"temp" 是配置Access数据库ODBC建立的数据源,sa 为用户名,口令为空
Statement s=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.
CONCUR_READ_ONLY);
//创建Statement
ResultSet rs=s.executeQuery("select * from test");
//执行查询结果存放在ResultSet中, test是一个数据库表
..........
· 本机应用编程接口的Java 驱动程序
此类驱动程序转换JDBC调用客户端的、针对特定数据库系统的API,如Oracle、Sybase、Informix、DB2 或其它的 DBMS,像桥驱动程序一样,这种类型的驱动程序要求在每一个客户机上安装一些二进制代码。
下面以IBM DB2 数据库为例来具体说明:
..........
Class.forname(" COM.ibm.db2.jdbc.app. DB2Driver");//调用JDBC 本地驱动程序
String db="test";//数据库名
String URL="jdbc:db2:"+db;//URL 值
String userid="adm";//数据库用户名
String password="abc123";//数据库用户密码
Connection con=DriverManager.getConnection(URL,userid,password);//与数据库连接
Statement s=con.createStatement();//创建Statement
...........
· 数据库中间件的纯Java 驱动程序
此类驱动程序将JDBC调用转换成为中间件供应商的协议,然后通过中间件服务器转换成为DBMS协议。网络服务器中间件可以连接所有Java客户端到各种不同的数据库,但是特定的协议取决于供应商。通常这种方式是JDBC最方便的选择,提供商可为Internet用户提供产品套件。为了使这些产品能够支持Internet访问,他们还必须处理安全、防火墙穿越等需求。各个提供商正在增加JDBC驱动程序到他们现存的中间件产品中。
下面以Oracle 数据库为例来具体说明:
...........
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//在Oracle中注册驱动程序,Driver Manager类允许动态地注册驱动程序
Connection conn=
DriverManager.getConnection("jdbc:oracle:thin:@ghq:1521:book","system","manager");
/**
* 将连接字符串传递给这个方法以建立到数据库的连接。连接字符串中的第一个值指明thin JDBC 驱动程序,
* (用的是@符号)连接一个名为ghq的Hostname(或连接IP地址),端口是1521,数据库的Oracle
SID是book,连* 接的用户名是system,口令是manager。
**/
Statement statemt=conn.createStatement();//创建一个SQL语句对象
ResultSet rsltset=statemt.executeQuery("SELECT USERNAME FROM book");
//执行查询结果存放在ResultSet中,book是一个数据库表
............
· 直接连接数据库的纯Java 驱动程序
这种驱动程序是本地协议的纯Java驱动程序,它转换JDBC调用由DBMS直接使用的网络协议。这种方式允许从客户机到DBMS服务器的直接调用,是Intranet访问的一种行之有效的解决方案。因为这些协议多数是专用的,因此数据库提供商将成为这种驱动程序的主要来源。
下面以MS SQL 数据库为例来具体说明:
后台数据库采用MS SQL Server7.0,相应的JDBC Driver为MS SQL Server特定的驱动程序com.inet.tds.TdsDriver(可以在网上下载),Java版本是1.2.x,JDBC 版本是2.0 。
.........
String url="jdbc:jdbc:inetdae:localHost:1433";//inetdae是驱动程序子协议名
String login="sa";
String password="";
Class.forName("com.inet.tds.TdsDriver");
Connection con=DriverManager.getConnection(url,login,password);
Statement s=con.createStatement();
ResultSet rs=s.executeQuery("select * from table");
..........
JDBC 使用方法
目前,Java使用最多的Applet是Web文件的一个组成部分。其中有数据库存取的Applet和能够使用JDBC来接触数据库的Applet。
Java Applet 通过JDBC 访问数据库的工作流程可以用图3 来描述。
图3 Applet通过JDBC访问数据库的工作流程
首先Web 浏览器从Web 服务器中下载嵌有Applet 的HTML 页面,解释并执行Applet 字节码。当执行到有访问数据库的Java 语句时,Applet 直接将相应的Java 命令发送给装在服务器上的JDBC。通过JDBC 向后端数据库发出SQL 请求,然后数据库将处理结果通过JDBC 直接返回给Applet。Applet 通过JDBC 访问数据库的方法是一种Web 数据库访问的实现方案。