我们在做信息系统的时候,都要访问数据库,因此数据库是很重要的,如果数据库有问题或者连接不上,都会造成访问不了数据,那java如何写一个数据库系统?下面来我们就来给大家讲解一下java开发数据库系统思路。
用Java 2 SDK,Standard Edition Version 1.2.1版本为开发工具,以已经成功开发的Java数据库应用系统案例为模板,结合Java2程序语句及java.sql包,介绍一下Java数据库应用系统开发的具体实现步骤。
1.设置数据库的连接
为了利用JDBC,你将需要一个数据库服务器和一个数据库驱动器。因为大多数读者的计算机已经安装了Windows95/98,我就用 微软的 Access 97做为我的数据库服务器(具体为Action.mdb),当然你也可以用其它的数据库作为数据库服务器。因为对JDBC而言,数据库服务器的类型无关紧 要,JDBC会提供一个独立于数据库服务器的访问数据库的方法。这是JDBC的主要优势所在。
你将还需要一个数据库驱动器,用来提供JDBC与你的数据库的连接。作者选用了较可能的JDBC-ODBC bridge 方式。为此需设置32-bit ODBC的数据源,选择System DSN(数据可被多用户访问,User DSN不同),增加新的数据源,配置新数据源的路径为Action.mdb数据库服务器的所在位置。
安装完成,Java程序员可以进行编制程序的阶段。首先程序员引用java.sql 包中相应的类与接口来进行对JDBC驱动器的管理:用Class 类中的 forName() 方法装入 JDBC驱动器,以JDBC-ODBC bridge 方式为例,装入JDBC驱动执行的语句为Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);用 DriverManager 类中getDrivers()方法返回所有安装在你的计算机中的JDBC驱动器,getConnection()建立与数据库的连接等。 getConnection()方法提供下面三种形式:
getConnection(String url)
getConnection(String url,String userID,String password)
getConnection(String url,Properties arguments)
其中字符串url表示数据库服务器所在处的特殊的URL。URL是被用来与不同的数据库驱动建立连接的统一网络资源,其形式如下:
jdbc:subprotocol:subname
所有的JDBC数据库协议开始于jdbc:。Subprotocol是被用来辨别JDBC驱动方式的。例如:JDBC-ODBC bridge 用jdbc:odbc:subname 这种用户协议形式,IDS JDBC driver 用jdbc:ids:subname 形式。数据库协议的subname标识数据库并且与subprotocol 和JDBC驱动方式有关。例如,以JDBC-ODBC bridge方式,我用下面的URL形式建立与数据源Tend建立连接:
jdbc:odbc:tend
getDrivers()和getConnection()方法是DriverManager类中最重要的方法,还有其它一些方法在此略。
2.与数据库进行连接
用DriverManager类的getConnection() 方法建立起与数据库连接,getConnection()返回一个对象,此对象是java.sql包中的Connection 接口对象。该接口定义了与之连接的数据库交互的一些方法、常量等,这些方法用来管理数据库的连接、获得连接的信息、提交数据库处理事件并且预处理可执行的 SQL语句。下面是Connection 接口的一些重要的方法:
close()-关闭一个数据库连接
getMetaData()-返回一个DatabaseMetaData 接口对象,该接口能被用来获得有关数据库的详细信息,包括数据库结构和数据库内容等。
createStatement()-创建一个SQL语句对象。
prepareStatement()-用SQL字符串创建一个SQL 预处理语句对象。预处理语句对象是可以被高效执行的预编译过的SQL语句。
下面提供一段程序,实现了JDBC的驱动及数据库的连接,供参考:
import java.sql.*; import java.util.*; class ConnectApp { 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); // 得到数据库的信息 DatabaseMetaData meta = connection.getMetaData();
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 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 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.数据库安全性
数据库的安全性问题是很多机构非常关心的问题。因为数据库中可能包含一些比较敏感的信息需要加以限制访问范围;数据的完整性也是极为重 要的,未授权的肆意修改数据库信息可能造成公司巨大的损失;数据的有效提供也是重要的,Internet/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实例知识,敬请关注奇Q工具网。
推荐阅读: