利用JavaJDBC进行数据库访问吴家骥.docx
《利用JavaJDBC进行数据库访问吴家骥.docx》由会员分享,可在线阅读,更多相关《利用JavaJDBC进行数据库访问吴家骥.docx(28页珍藏版)》请在冰豆网上搜索。
利用JavaJDBC进行数据库访问吴家骥
利用JavaJDBC进行数据库访问
吴家骥 李德河
(中国科学院陕西天文台,陕西省临潼,710600)
BC访问数据库,只须下载返回的数据,大大提高了速
度。
[2]
JDBC扩展了Java的功能,例如,用Java和JDBCAPI可以发布含有applet的网页,而该
applet使用的信息可能来自远程数据库。
企业也可以用JDBC通过Intranet将所有职员连
到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Linux、Macintosh和
UNIX等各种不同的操作系统)。
4 JDBC与ODBC的区别[3]
Microsoft的ODBC(开放式数据库连接)API是使用最广的、用于访问关系数据库的编
程接口,几乎在所有平台上它都能连接所有的数据库。
但ODBC不适合直接在Java中使
用,因为它使用C语言接口,从Java调用本地C代码,在安全性、实现、坚固性和程序的自动
移植性方面都有许多缺点。
Java没有指针,而ODBC却对指针用得很广泛(包括很容易出
错的指针“void*”)。
另外,必须手动地将ODBC驱动程序安装在每台客户机上,运用Thin
JDBC技术,客户机只须一个Web浏览器。
所以,JDBC更适合在Internet上运用。
事实上,
JDBC保留了ODBC的基本设计特征,两种接口都基于X/OpenSQLCLI(调用级接口)。
5 JDBC原理
JDBC主要有2种接口,分别是面向程序开发人员的JDBCAPI和面向驱动程序开发商
的JDBCDriverAPI。
它们的功能如图1所示。
图1 JDBC结构示意图
目前JDBC驱动程序可分为以下4个种类:
(1)JDBC-ODBC桥加ODBC驱动程序:
利用ODBC驱动程序提供JDBC访问。
应注
意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程
序的每个客户机上。
因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装
156陕西天文台台刊 23卷
∥输入JDBC类
importjava.sql.*;
importjava.awt.*;
importjava.io.*;
importjava.util.*;
publicclassApplet2extendsjava.applet.Applet
{∥指定要加载的驱动
staticfinalStringdriver-class=“oracle.odbc.driver.OracleDriver”;
∥指定连接字符串
staticfinalStringconnect-string=
“jdbc:
oracle:
thin:
username/password@hostname:
1521:
v8i815”;
staticfinalStringquery=“select*frommy-testDB”;∥定义一个对数据库的查询
Buttonexecute-button; ∥定义一个按钮
TextAreaoutput; ∥定义一个文本域,用来显示查询结果
Connectionconn; ∥定义一个数据库连接
∥创建用户界面
publicvoidinit()
{
this.setLayout(newBorderLayout());
Panelp=newPanel();
p.setLayout(newFlowLayout(FlowLayout,LEFT));
execute-button=newButton(“connectJDBC”);∥实例化按钮
p.add(“North”,p);
output=newTextAre(10,60);∥实例化文本域
this.add(“Center”,output);
}
∥当按钮被单击所相应的事件
publicbooleanaction(Eventev,Objectarg)
{
if(ev.targer==execute-button)
{
158陕西天文台台刊 23卷
三层结构的应用程序服务器代码。
(2)本地API-部分用Java来编写的驱动程序:
这种类型的驱动程序把客户机API上
的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。
需注意,象桥驱
动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。
(3)JDBC网络纯Java驱动程序:
这种驱动程序将JDBC转换为与DBMS无关的网络
协议,之后这种协议又被某个服务器转换为一种DBMS协议。
这种网络服务器中间件能够
将它的纯Java客户机连接到多种不同的数据库上。
所用的具体协议取决于提供者。
通常,
这是最为灵活的JDBC驱动程序。
有可能所有这种解决方案的提供者都提供适合于In-
tranet用的产品。
为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全
性、通过防火墙的访问等方面的额外要求。
(4)本地协议纯Java驱动程序:
这种类型的驱动程序将JDBC调用直接转换为DBMS
所使用的网络协议。
这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的
一个很实用的解决方法。
由于许多这样的协议都是专用的,因此数据库提供者自己将是主
要来源,有几家提供者已在进行这一工作。
预计第(3)、(4)类驱动程序将成为从JDBC访问数据库的首选方法,第
(1)、
(2)类驱动
程序在直接的纯Java驱动程序还没有上市前将会作为过渡方案来使用。
第(3)、(4)类驱动
程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的applet来下
载该驱动程序)。
JDBCAPI预览:
⑴java.sql.DriverManager:
提供调入驱动程序的方法,并支持java.sql.Driver接口中
的类创建数据库的连接,即负责处理JDBC数据库驱动程序的加载和卸载。
⑵java.sql.Connection:
完成对一个指定数据库的连接。
⑶java.sql.Statement:
同一个连接,一起将SQL语句发送到数据库中。
⑷java.sql.PreparedStatement:
同一个连接,但是以预编译的形式发送SQL语句。
⑸java.sql.CallableStatement:
同一个连接,但是以调用数据库存储函数的形式发送。
⑹java.sql.ResultSet:
返回包含符合SQL语句中条件的所有行,并且它通过一套get
方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
6 应用举例
此例为Javaapplet,数据库为oracle8i,操作系统为Linux,Web服务器为Apache,客户端
仅需一个Web浏览器(若浏览器不支持Java,须安装Javaplug-in)。
开发工具为JDK1.2.2。
∥
∥以下代码可以用作模板。
仅需
∥替换相应的url、登录和口令,然后替换
∥您要发送到数据库中的SQL语句。
∥
∥模块:
JdbcApplet.java
∥描述:
JDBC的测试程序。
此javaapplet将与oracle的JDBC驱动程序连接,发出select语句,
157第23卷 第2期 吴家骥等:
利用JavaJDBC进行数据库访问
摘 要
Java现已成为开发Internet应用最热门的语言,而JDBC则是Java程序访问
数据库最重要的技术。
这里要介绍的是在WWW环境下,运用JavaJDBC连接数
据库的技术,及JDBC的原理和例子。
关键词 Java JDBC 数据库
分类号 TP312
1 引 言
由于传统的客户/服务器数据库模式缺乏扩展性和跨平台性,并且客户端维护成本高。
所以,随着网络的发展,基于Java的JDBC技术的Web数据库就弥补了这方面的不足,真正
做到了“一次编写,任何地方运行”[1]。
2 什么是JDBC
JDBCTM是一种用于执行SQL语句的JavaTMAPI(与ODBC不同的是JDBC本身是个商
标名,而不是JavaDatabaseConnectivity的缩写词)。
JDBC是由JavaSoft定义的Java与数
据库连接的接口。
JDBC允许任何使用Java语言编写的小应用程序(applet)或应用程序(ap-
plication)访问远程数据库、获取数据,并对数据库进行更新存储。
而且,使用Java编程语言
编写程序,无须担忧要为不同的平台编写不同的应用程序。
将Java和JDBC结合起来,程序
员将只需写一遍程序就可让它在任何平台上运行。
3 JDBC能作些什么
Java和JDBC的结合,使信息传播变得容易和经济,即使这些信息是储存在不同数据库
管理系统上,企业可继续使用它们安装好的数据库,并能便捷地存取信息。
新程序的开发期
很短,安装和版本控制将大为简化。
程序员可只编写一遍应用程序或只更新一次,然后将它
放到服务器上,随后任何人就都可得到最新版本的应用程序。
对于商务上的销售信息服务,
Java和JDBC可为外部客户提供获取信息更新的更好方法。
特别是在交互频繁的网页中,
如果用通常的CGI方式访问数据库,用户每次提交表单后,浏览器都需要刷新、下载页面。
2000-06-20收到原稿,2000-12-18收到修改稿
文本域
∥判断是否打开一个数据库连接
if(conn==null)
{
∥加载JDBC驱动程序
output.appendText(“LoadingJDBCdriver”+driver-class+“n”);
Class.forName(driver-class);
∥连接到指定数据库
output.appendText(“Connectingto”+connect-string+“n”);
conn=DriverManager.getConnection(connect-string);
output.appendText(“Connectedn”);∥如果不能连接,则抛出异常。
因此,如果进
∥入这一步,则已成功连接到数据库。
}
∥创建一个Statement对象,使我们可以向驱动程序提交SQL语句
Statementstmt=conn.createStatement();
∥提交查询,创建ResultSet对象
output.appendText(“Executingquery”+query+“n”);
ResultSetrset=stmt.executeQuery(query);
∥显示数据并获取它,直到结果集末尾
while(rset.next())
output.appendText(rset.getString
(1)+“n”); ∥在文本域中显示查询结果
output.appendText(“don.n”);
}
catch(Exceptione)
{
output.appendText(e.getMessage()+”n”);∥显示异常
}
returntrue;
}
else
returnfalse;
159第23卷 第2期 吴家骥等:
利用JavaJDBC进行数据库访问
}
}
本例中的客户端无须安装oracle客户端协议,Java程序放在服务器端,使升级和维护非
常方便。
当嵌有Javaapplet的网页被打开时,
(1)Java小程序会通过JDBC直接连接服务器端数据库。
首先要加载JDBC数据库驱
动程序,然后建立连接。
本例中使用Class.forName方法显示加载驱动程序,通过调用
DriverManager.getConnection得到一个java.sql.Connection对象,参数connect-string指定
了要访问的数据库。
(2)执行查询语句。
创建Statement对象,使用executeQuery方法执行SQL语句。
(3)检索结果集。
ResultSet对象包括一个查询语句返回的表,这个表包括所有的查询
结果。
对这个表进行处理,最后的显示结果给用户。
7 结束语
目前开发电子商务最热门的JavaServerPage(JSP)技术,便是通过JDBC来实现对后台
数据库的访问。
由于Java具有其他语言所不具备的易用性、跨平台性和安全性,必将成为
最受欢迎的编程语言。
参考文献
[1] http:
∥
[2] 齐永强等.JDBC连接数据库.重庆邮电学院学报,1999,
(1):
63~66
[3] JDK1.2help,
DatabaseAccesswithJavaJDBC
WUJia-Ji LIDe-He
(ShaanxiAstronomicalObservatory,TheChineseAcademyofSciences,Lintong,Shaanxi,710600)
Abstract
JavahasbecomethemostpopularprogramlanguageforInternetapplicationandJDBCis
themostimportantmethodforJavaprogramtoaccessdatabase.Thetechniqueofdatabaseac-
cesswithJavaJDBC,andtheprincipleandexampleforJDBCinWWWenviromentareintro-
ducedinthispaper.
BC访问数据库,只须下载返回的数据,大大提高了速
度。
[2]
JDBC扩展了Java的功能,例如,用Java和JDBCAPI可以发布含有applet的网页,而该
applet使用的信息可能来自远程数据库。
企业也可以用JDBC通过Intranet将所有职员连
到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Linux、Macintosh和
UNIX等各种不同的操作系统)。
4 JDBC与ODBC的区别[3]
Microsoft的ODBC(开放式数据库连接)API是使用最广的、用于访问关系数据库的编
程接口,几乎在所有平台上它都能连接所有的数据库。
但ODBC不适合直接在Java中使
用,因为它使用C语言接口,从Java调用本地C代码,在安全性、实现、坚固性和程序的自动
移植性方面都有许多缺点。
Java没有指针,而ODBC却对指针用得很广泛(包括很容易出
错的指针“void*”)。
另外,必须手动地将ODBC驱动程序安装在每台客户机上,运用Thin
JDBC技术,客户机只须一个Web浏览器。
所以,JDBC更适合在Internet上运用。
事实上,
JDBC保留了ODBC的基本设计特征,两种接口都基于X/OpenSQLCLI(调用级接口)。
5 JDBC原理
JDBC主要有2种接口,分别是面向程序开发人员的JDBCAPI和面向驱动程序开发商
的JDBCDriverAPI。
它们的功能如图1所示。
图1 JDBC结构示意图
目前JDBC驱动程序可分为以下4个种类:
(1)JDBC-ODBC桥加ODBC驱动程序:
利用ODBC驱动程序提供JDBC访问。
应注
意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程
序的每个客户机上。
因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装
156陕西天文台台刊 23卷
∥输入JDBC类
importjava.sql.*;
importjava.awt.*;
importjava.io.*;
importjava.util.*;
publicclassApplet2extendsjava.applet.Applet
{∥指定要加载的驱动
staticfinalStringdriver-class=“oracle.odbc.driver.OracleDriver”;
∥指定连接字符串
staticfinalStringconnect-string=
“jdbc:
oracle:
thin:
username/password@hostname:
1521:
v8i815”;
staticfinalStringquery=“select*frommy-testDB”;∥定义一个对数据库的查询
Buttonexecute-button; ∥定义一个按钮
TextAreaoutput; ∥定义一个文本域,用来显示查询结果
Connectionconn; ∥定义一个数据库连接
∥创建用户界面
publicvoidinit()
{
this.setLayout(newBorderLayout());
Panelp=newPanel();
p.setLayout(newFlowLayout(FlowLayout,LEFT));
execute-button=newButton(“connectJDBC”);∥实例化按钮
p.add(“North”,p);
output=newTextAre(10,60);∥实例化文本域
this.add(“Center”,output);
}
∥当按钮被单击所相应的事件
publicbooleanaction(Eventev,Objectarg)
{
if(ev.targer==execute-button)
{
158陕西天文台台刊 23卷
三层结构的应用程序服务器代码。
(2)本地API-部分用Java来编写的驱动程序:
这种类型的驱动程序把客户机API上
的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。
需注意,象桥驱
动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。
(3)JDBC网络纯Java驱动程序:
这种驱动程序将JDBC转换为与DBMS无关的网络
协议,之后这种协议又被某个服务器转换为一种DBMS协议。
这种网络服务器中间件能够
将它的纯Java客户机连接到多种不同的数据库上。
所用的具体协议取决于提供者。
通常,
这是最为灵活的JDBC驱动程序。
有可能所有这种解决方案的提供者都提供适合于In-
tranet用的产品。
为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全
性、通过防火墙的访问等方面的额外要求。
(4)本地协议纯Java驱动程序:
这种类型的驱动程序将JDBC调用直接转换为DBMS
所使用的网络协议。
这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的
一个很实用的解决方法。
由于许多这样的协议都是专用的,因此数据库提供者自己将是主
要来源,有几家提供者已在进行这一工作。
预计第(3)、(4)类驱动程序将成为从JDBC访问数据库的首选方法,第
(1)、
(2)类驱动
程序在直接的纯Java驱动程序还没有上市前将会作为过渡方案来使用。
第(3)、(4)类驱动
程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的applet来下
载该驱动程序)。
JDBCAPI预览:
⑴java.sql.DriverManager:
提供调入驱动程序的方法,并支持java.sql.Driver接口中
的类创建数据库的连接,即负责处理JDBC数据库驱动程序的加载和卸载。
⑵java.sql.Connection:
完成对一个指定数据库的连接。
⑶java.sql.Statement:
同一个连接,一起将SQL语句发送到数据库中。
⑷java.sql.PreparedStatement:
同一个连接,但是以预编译的形式发送SQL语句。
⑸java.sql.CallableStatement:
同一个连接,但是以调用数据库存储函数的形式发送。
⑹java.sql.ResultSet:
返回包含符合SQL语句中条件的所有行,并且它通过一套get
方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
6 应用举例
此例为Javaapplet,数据库为oracle8i,操作系统为Linux,Web服务器为Apache,客户端
仅需一个Web浏览器(若浏览器不支持Java,须安装Javaplug-in)。
开发工具为JDK1.2.2。
∥
∥以下代码可以用作模板。
仅需
∥替换相应的url、登录和口令,然后替换
∥您要发送到数据库中的SQL语句。
∥
∥模块:
JdbcApplet.java
∥描述:
JDBC的测试程序。
此javaapplet将与oracle的JDBC驱动程序连接,发出select语句,
157第23卷 第2期 吴家骥等:
利用JavaJDBC进行数据库访问
摘 要
Java现已成为开发Internet应用最热门的语言,而JDBC则是Java程序访问
数据库最重要的技术。
这里要介绍的是在WWW环境下,运用JavaJDBC连接数
据库的技术,及JDBC的原理和例子。
关键词 Java JDBC 数据库
分类号 TP312
1 引 言
由于传统的客户/服务器数据库模式缺乏扩展性和跨平台性,并且客户端维护成本高。
所以,随着网络的发展,基于Java的JDBC技术的Web数据库就弥补了这方面的不足,真正
做到了“一次编写,任何地方运行”[1]。
2 什么是JDBC
JDBCTM是一种用于执行SQL语句的JavaTMAPI(与ODBC不同的是JDBC本身是个商
标名,而不是JavaDatabaseConnectivity的缩写词)。
JDBC是由JavaSoft定义的Java与数
据库连接的接口。
JDBC允许任何使用Java语言编写的小应用程序(applet)或应用程序(ap-
plication)访问远程数据库、获取数据,并对数据库进行更新存储。
而且,使用Java编程语言
编写程序,无须担忧要为不同的平台编写不同的应用程序。
将Java和JDBC结合起来,程序
员将只需写一遍程序就可让它在任何平台上运行。
3 JDBC能作些什么
Java和JDBC的结合,使信息传播变得容易和经济,即使这些信息是储存在不同数据库
管理系统上,企业可继续使用它们安装好的数据库,并能便捷地存取信息。
新程序的开发期
很短,安装和版本控制将大为简化。
程序员可只编写一遍应用程序或只更新一次,然后将它
放到服务器上,随后任何人就都可得到最新版本的应用程序。
对于商务上的销售信息服务,
Java和JDBC可为外部客户提供获取信息更新的更好方法。
特别是在交互频繁的网页中,
如果用通常的CGI方式访问数据库,用户每次提交表单后,浏览器都需要刷新、下载页面。
2000-06-20收到原稿,2000-12-18收到修改稿
文本域
∥判断是否打开一