随着电子商务及动态网站的迅速发展,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 数据库访问的实现方案。
闽公网安备 35060202000074号