应用Java技术实现数据库应用系统(2)

发表于:2007-07-14来源:作者:点击数: 标签:
应用Java技术实现数据库应用系统(2) · 3.利用结果集工作 数据库查询被执行后,查询的结果作为一个两维(行、列)数据表返回。ResultSet接口被用来提供访问查询结果的数据表,查询结果被当作ResultSet对象而返回,ResultSet对象提供“指针”,指针每次访问
应用Java技术实现数据库应用系统(2)

· 3.利用结果集工作

数据库查询被执行后,查询的结果作为一个两维(行、列)数据表返回。ResultSet接口被用来提供访问查询结果的数据表,查询结果被当作ResultSet对象而返回,ResultSet对象提供“指针”,指针每次访问数据库表的一行。当ResultSet对象从查询中返回时,指针初始指向数据表的第一行,ResultSet 的next() 方法用来移动指针到数据表的下一行,如果到达表尾,next() 方法返回假的布尔值-false,否则为真。ResultSet接口提供大量的获得数据的方法,这些方法返回数据表中任意位置的数据,不论是基本数据类型或引用数据类型的数据。getMetaData()方法返回ResultSetMetaData接口对象,该对象包含数据表行的信息。ResultSetMetaData 接口提供变量和从ResultSet对象获取信息的方法,getColumnCount() 方法返回数据表的列数,getColumnName() 方法返回提取的数据库中的列名称,即数据库字段名,getColumnType() 方法返回列的SQL类型,ResultMetaData中其它的方法被用访问列的额外属性,如列的显示宽度、数据格式及读/写状态等。注意ResultSet中的列其始索引号为1而不是0。下面提供一段程序:
static void displayResults(ResultSet r) throws SQLException {
// 获得数据结果集合
ResultSetMetaData rmeta = r.getMetaData();
// 确定数据集的列数,亦字段数
int numColumns=rmeta.getColumnCount();
// 输出每一个数据值
for(int i=1;i<=numColumns;++i) {
if(i<numColumns)
System.out.print(rmeta.getColumnName(i)+" | ");
else
System.out.println(rmeta.getColumnName(i));
}
while(r.next()){
for(int i=1;i<=numColumns;++i) {
if(i<numColumns)
System.out.print(r.getString(i)+" | ");
else
System.out.println(r.getString(i).trim());
}
}
}

· 4.执行SQL语句

SQL代表着结构化查询语言,即 Structured Query Language的缩写。SQL是用来同数据库服务器交互的一种语言。SQL被IBM在70-80年代开发,80年代后进行了标准化。但标准已经更新,现已出现好几个版本。另外一些数据库厂商也增加扩展了一些特殊的功能语句等。JDBC需要与JDBC兼容的SQL驱动支持,即支持ANSI SQL72标准。SQL有很多用途,当SQL语句被用来创建、设计数据库时,它是一个数据定义语言;当用来向数据库插入信息、更新或删除已经存在的信息时,它是一个数据维护语言;当从数据库中查询提取信息时,它是数据查询语言。有关SQL语句的一些语法规则,请参考有关书籍,在此略。Java语言设计java.sql 包的目的就是让你执行符合Java的SQL语句。java.sql中的Statement 接口定义了一些方法,这些方法通过SQL语句的执行来与数据库交互,也支持通过ResultSet对象返回查询结果集合的处理和提供查询处理机制的控制。execute()、 executeQuery() 和executeUpdate() 方法是Statement接口的主要方法。executeQuery() 方法执行一个 SQL语句(如SELECT语句等)并查询返回一个ResultSet对象。executeUpdate() 方法执行一个SQL 语句 (如INSERT、UPDATE、DELETE 语句等)并更新数据库、返回SQL查询结果集合的行数(记录数),如果结果集合为空则行数为0。
Java中有关SQL语句的程序片段如下:
import java.sql.*;
import java.util.*;
class ResultApp {
public static void main(String args[]) {
try{
// Load the JDBC-ODBC bridge driver方式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:tend";
// 连接到数据库
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql="SELECT * FROM courses";
// 执行SQL 语句得到结果集合
ResultSet result = statement.executeQuery(sql);
displayResults(result);
// 关闭数据库连接
connection.close();
}catch(Exception ex){
System.out.println(ex);
System.exit(0);
}
}

· 5.数据库安全

数据库的安全性问题是很多机构非常关心的问题。因为数据库中可能包含一些比较敏感的信息需要加以限制访问范围;数据的完整性也是极为重要的,未授权的肆意修改数据库信息可能造成公司巨大的损失;数据的有效提供也是重要的,Inte.net/Intranet用户随时需要信息,这就常常需要提供每天24小时、每周7天的可访问。JDBC支持数据库安全吗?答案不是非常满意。当前JDBC要依靠数据库服务器自身提供安全保护。企业范围的数据库服务器,如微软的SQL Server提供用户ID和口令,然而,即使是口令保护也不是非常安全的,如果口令在客户与服务器之间未加密,它们能很容易被截获而危及安全。

Java的安全机制很高,Java2改进了沙箱,为用户和程序人员提供了灵活的安全管理及配置工具。Applet程序安全性更加灵活,建议利用Java的安全机制及提供的一些工具来进行数据库应用系统的开发。
Java2(JDK1.2)提供的安全工具如下:
用jar工具打包你的applets成为Java 存档文件 (JAR);
用jarsigner对JAR文件进行数字签名;
用policytool对信任applets的Java运行环境Java Runtime Environment (JRE)配置;
用keytool进行数字证书的签证;

· 三、 Java 的数据库应用开发展望

至此,你已知道:要进行Java 数据库应用程序的设计,需要具备多方面的技能,包括了解或熟练数据库驱动程序、SQL( 结构化查询语言)以及java.sql包所包含的类、接口等。JavaSoft 已经注意到了Java 在数据库程序设计方面的棘手而复杂,他们现在正在开发新的同Java一样容易使用的产品JavaBlend ,该产品将大大简化利用JDBC构建数据库应用系统的过程。JavaBlend 将自动镜像Java 对象成为存储在数据库中的信息。所有对对象的操作,都将产生与之镜像的数据库的动作,包括对存储在数据库中信息的自动查询、更新等。

一旦Java 的对象到数据库镜像(Java object-to-database mapping)被成功建立,JavaBlend 将免费发放给Java 程序员,以使Java 程序员从利用繁琐SQL语句、结果集合解决方案过渡到利用JavaBlend 把对Java 对象的方法调用相应地自动转化成SQL语句和结果集合这一简单方案。这将使JDBC和SQL知识在数据库开发时不必考虑过多,而使程序员专心于用户业务方案的提供解决。JavaBlend目前并不包含在JDK 1.2中。
Java 语言及其技术是当今世界程序设计语言的主流。应用Java 技术实现数据库应用系统是未来的发展方向,Java 的数据库应用现已成功地应用于商业、政府及大学等领域,应用才刚刚起步。相信不久的将来,Java 技术将更加完善成熟。Java的数据库应用也将遍地开花。

· 参考文献
[1] 《Java 1.2 unleashed》 Jamie Jaworski 1998,Macmillan Computer publishing
[2] 《Java 教程-Internet 面向对象程序设计》 Mary Campione 等著
[3] 《Java语言程序设计》 姜刚等著 1998,人民邮电出版社
[4] 《Web网站的创建、规划、管理及信息发布》 1999,作者

· 作者简介

张姝,工程师,毕业于东北大学计算机及其应用专业。现主要从事工程CAD设计及管理信息系统开发工作,是中国电机工程学会会员,曾发表过《网络环境下管理信息系统设计的几点考虑》、《Intranet 环境下事物处理系统的解决方案》、《Web网站的创建、规划、管理及信息发布》等论文。

(全文完)

原文转自:http://www.ltesting.net