Java程序设计:chapter14 JDBC技术和数据库开发应用_第1页
Java程序设计:chapter14 JDBC技术和数据库开发应用_第2页
Java程序设计:chapter14 JDBC技术和数据库开发应用_第3页
Java程序设计:chapter14 JDBC技术和数据库开发应用_第4页
Java程序设计:chapter14 JDBC技术和数据库开发应用_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第14章 JDBC技术和数据库开发应用教学目标JDBC技术JDBC的体系结构JDBC驱动程序类型JDBC API的主要类和接口简介创建MySQL服务器上的数据库MySQL的安装和配置创建用户数据库studyJava应用程序通过JDBC存取数据库的过程应用JDBC存取数据库的步骤JDBC存取MySQL数据库的简单实例教学目标JDBC中的主要接口和类DriverManager类 Connection接口Statement接口PreparedStatement接口CallableStatement接口Java数据类型和SQL中支持的数据类型的对应关系ResultSet接口ResultSetMetaD

2、ata接口DatabaseMetaData接口数据库开发应用实例Study数据库的插入、修改、删除记录的程序设计查询Study数据库的程序设计14.1 JDBC技术在Java程序中如何连接和访问数据库呢?这就要用到JDBC (Java Database Connectivity)技术。JDBC是为Java语言定义的一个SQL调用级的数据库编程接口。通过JDBC API,程序员能够在Java程序中方便地连接和访问数据库,实现Java的数据库编程。通过使用JDBC,开发人员可以很方便地将SQL语句传递给几乎任何一种数据库。也就是说开发人员可以不必写一个程序访问Orcale,再写一个程序访问SQL

3、Server。用 JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。JDBC是一组由Java语言编写的类和接口,其API包含在java.sql和javax.sql两个包中。14.1.1 JDBC的体系结构Java应用程序JDBC APIJDBC Driver Manager数据库驱动器Java应用程序数据库数据库数据库Java应用程序图14-1 JDBC的体系结构14.1.2 JDBC驱动程序类型1JDBC-ODBC bridge plus ODBC driver(类型1):JDBC-ODBC桥接驱动程序。其底层通过ODBC(Open databas Connectivity)

4、驱动程序来连接数据库。2 Native-API partly-Java driver(类型2):本地 API - 部份用 Java 来编写的驱动程序。此种方式先将JDBC函数调用转换成数据库客户端函数库的API(位于客户端计算机),然后与数据库相连。3JDBC-Net pure Java driver(类型3):JDBC 网络纯 Java 驱动程序。首先JDBC驱动程序会将JDBC函数调用解释成与数据库无关的网络通信协议,经过中介服务器的第二次解析,最后才转换成相对应的数据库通信协议.4.Native-protocol pure Java driver(类型4)本地协议纯 Java驱动程序。这

5、种驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。14.1.3 JDBC API的主要类和接口简介JDBC API由一系列与数据库访问有关的类和接口组成,它们放在java.sql子包中。其中主要的类和接口有: DriverManager类:管理个各种数据库驱动程序加载,建立数据库连接。 Connection接口用来建立数据库连接。 Statement接口、与子类PreparedStatement、CallableStatement接口:用于处理连接中的SQL语句 ResultSet;用于处理数据库操作结果集。14. 创建MySQL的数据库SQL Server 2000数据库逐

6、渐成为Windows操作系统平台下进行数据库应用开发中较为理想的选择之一,它可作为大型Web站点、企业OLTP(联机事务处理)以及数据仓库系统等的产品数据库服务器。 14.2.1 MySQL的安装和配置1.下载Windows版的安装软件包2.安装和配置MySQL软件3. NavicatforMySQL是基于Windows平台,为MySQL数据库量身订作的类似于MySQL的用户管理界面工具。使用了图形用户界面(GUI),可以用一种安全和更为容易的方式快速地创建、组织、存取和共享数据。 14.2.2 创建数据库studyMySQL Server服务器上存放着一组系统数据库和用户数据库。用户数据库S

7、tudy是我们本章要用的数据库,存放着学生的基本信息、课程情况和学生学习各门课程的学习成绩。Study数据库中有学生情况表student、课程情况表course和学习成绩表sc。student由学号、姓名、性别、年龄和所在系各字段组成;course由课程号、课程名和学分各字段组成;sc由学号、课程号和学习成绩各字段组成。先将study.sql脚本文件复制到C盘根目录下,打开MySQL命令行窗口(MySQL Command Line Client),通过运行下面的脚本命令:Source c:study.sql完成创建数据库study和三张表student、course和sc14.2.2 创建数据

8、库study先将study.sql脚本文件复制到C盘根目录下,打开MySQL命令行窗口(MySQL Command Line Client),通过运行下面的脚本命令:source c:study.sql 完成创建数据库study和三张表student、course和sc14.3 Java应用程序通过JDBC存取数据库的过程 本节首先介绍通过JDBC存取数据库的步骤, 然后通过一个简单实例演示整个过程。14.3.1 应用JDBC存取数据库的步骤Java应用程序通过JDBC存取数据库时应该遵循4个步骤:1. 加载(注册)适当的JDBC驱动程序,建立数据库连接2. 建立与执行SQL语句3. 处理结果

9、集4. 关闭数据库连接14.3.1 应用JDBC存取数据库的步骤加载JDBC驱动程序,建立数据库连接(1)加载JDBC驱动程序使用Class.forName()加载JDBC驱动程序,其语句的语法格式如下:Class.forName(String jdbc_driver);例如,加载MySQL驱动程序的语句:Class.forName(“com.mysql.jdbc.Driver”);需要注意的是,如果驱动器类有可能不存在,使用此方法就可能会抛出ClassNotFoundException异常,因此需要捕获这个异常:try Class.forName(“com.mysql.jdbc.Driver

10、”);catch(ClassNotFoundException e) System.out.println(e.getMessage);14.3.1 应用JDBC存取数据库的步骤加载JDBC驱动程序,建立数据库连接(2)建立数据库连接使用DriverManger.getConnection()建立一个新的数据库连接。其方法格式如下: Connection getConnection(String connURL,String loginName,String password);返回连接到特定数据库的Connection对象。其中 :connURL访问数据库的URL路径 。格式为:协议:子协议

11、:数据源表示协议:在JDBC中总是以jdbc开始 子协议:是桥连接的驱动程序或是数据库管理系统名称。 数据源标识:标记找到数据库来源的地址与连接端口。loginName是程序连接时所用的数据库用户名。 password该用户名的密码 。 Connection是一个接口,表示与指定数据库的连接DriverManager类位于JDBC的管理层,作用于用户和驱动程序之间。它负责跟踪在一个系统中所有可用的JDBC驱动程序,并在数据库和相应驱动程序之间建立连14.3.1 应用JDBC存取数据库的步骤1. 加载JDBC驱动程序,建立数据库连接例14-1 连接MYSQL的数据库study,用户名为”root

12、”,口令为”root” ,则建立数据库连接的代码如下。try Class.forName(com.mysql.jdbc.Driver);String url=jdbc:mysql:/localhost:3306/study;String login=root,password=“root;Connection conn=DriverManager.getConnection(url,login,password); catch (ClassNotFoundException e) /输出捕获到的异常信息e.printStackTrace(); catch (SQLException e) /输

13、出捕获到的异常信e.printStackTrace();2.建立SQL语句对象,执行查询建立数据库连接后,必须先建立一个Statement对象才能执行SQL语句。在Java中,定义了三种类型的Statement:(1)Statement(2)PreparedStatement(3)CallableStatement三种类型均包含用于进行数据库操作的SQL语句。14.3.1 应用JDBC存取数据库的步骤2.建立SQL语句对象,执行查询(1) 使用Statement用Connection的方法createStatement创建Statement对象。在Statement对象上,可以使用execut

14、eQuery、executeUpdate等方法,这些方法需要一个表示SQL语句的字符串作为参数。上述方法将这些SQL语句传送给数据库,就可以对数据库进行相应的操作了。示例如下:Statement Stmt=conn.createStatement();String sqlQuery=select*from student;ResultSet rs=Stmt.executeQuery(sqlQuery);14.3.1 应用JDBC存取数据库的步骤2.建立SQL语句对象,执行查询(2) 使用PreparedStatement用于处理预编译的SQL语句,可以重复执行,。如果某个SQL语句必须重复执行

15、,建议使用PreparedStatement,执行效率更高。示例如下:PreparedStatement prepStmt=conn.prepareStatement(“select*from Employee”);Resultset rset=prepStmt.executeQuery();用于带参数的SQL语句的执行,参数用为你好(?)表示。下面的示例中,将执行带有两个输入参数的UPDATE语句,其语句如下:执行带2个参数的UPDATE语句,示例如下:PreparedStatement prepStmt=conn.prepareStatement(UPDATE emp SET sal =

16、? WHERE ename = ? );prepStmt.setInt(1,100000); /设置传入的第1个int型个参数值为100000prepStmt.setString(2,Rich); /设置传入的第2个String型个参数值为”Rich”prepStmt.executeUpdate();14.3.1 应用JDBC存取数据库的步骤2.建立SQL语句对象,执行查询(3) 使用CallableStatement使用CallableStatement条用数据库存储过程。语法格式为:CallableStatement 变量名=conn.prepareCall(“call 存储过程名称”);

17、下面的示例,将调用带有两个输入参数的存储过程update_salary,代码如下:CallableStatement callStmt=conn.prepareCall(call update_salary(?,?);callStmt.setInt(1,7788); /设置要传入的第一个输入参数(?)值是7788callStmt.setInt(2,10000); /设置要传入的第二个输入参数(?)值是10000callStmt.execute();14.3.1 应用JDBC存取数据库的步骤2.建立SQL语句对象,执行查询建立Statement对象或PreparedStatement对象或Cal

18、lableStatement对象之后,有3种方法执行SQL语句(选择哪种由SQL语句的内容决定):executeQuery():用于执行返回单个结果集的语句,例如select语句。返回一个结果集(ResultSet 对象)。例如:ResultSet rset=stmt.executeQuery (“select*from student);executeUpdate(): 用于执行执行insert、delete、update 语句对数据库进行增、删、改记录操作以及SQL语言中的DDL(数据定义语言)语句,例如create table语句等。返回值是一个整数,表示受影响的行数(即更新计数),比如

19、修改了多少行、删除了多少行等。对于 create table 等语句,因不涉及到行的操作,所以executeUpdate的返回值总为零。例如:stmt.executeUpdate(update emp set age=sge+1)stmt.executeUpdate(delete emp for age=20);stmt.execute (“create table“+(no CHAR(10),name CHAR(10);execute():用于执行返回多个结果集(ResultSet 对象)、多个更新计数或二者组合的语句。例如执行某个已存储过程或动态执行SQL,这时有可能出现多个结果的情况14

20、.3.1 应用JDBC存取数据库的步骤3.处理结果集查询结果作为结果集(ResultSet)对象返回后,我们可以从ResultSet对象中提取结果使用next方法ResultSet对象中含有检索出来的行,其中有一个指示器,指向当前可操作的行,初始状态下指示器是指向第一行之前方法next的功能是将指示器下移一行,所以第一次调用next方法时便将指示器指向第一行,以后每一次对next的成功调用都会将指示器移向下一行使用getXXX方法使用相应类型的getXXX方法可以从当前行指定列中提取不同类型的数据。例如,提取VARCHAR类型数据时就要用getString方法,而提取FLOAT类型数据的方法是

21、getFloat允许使用列名或列序号作为getXXX方法的参数例如:String s = rs.getString(Name);提取当前行Name列中的数据,并把其从SQL的VARCHAR类型转换成Java的String类型,然后赋值给对象sString s = rs.getString(2);/提取当前行的第2列数据这里的列序号指的是结果集中的列序号,而不是原表中的列序号14.3.1 应用JDBC存取数据库的步骤3.处理结果集可用while循环打印出ResultSet记录集内的所有记录。例如:while(rs.next() System.out.println(rs.getInt(1); S

22、ystem.out.println(rs.getString(2);1、2、3、表示各字段相对位置14.3.1 应用JDBC存取数据库的步骤4.关闭数据库连接最后一个操作是关闭Connection、Statement、ResultSet等对象。rs.close();stmt.close();con.close();14.3.1 应用JDBC存取数据库的步骤14.3.2创建Eclipse的项目实例:完成JDBC访问MySQL数据库study例14-2 通过JDBC存取MySQL的数据库study的表course的程序。1.程序代码见14-2/JdbcExample.java2.使用Eclipse

23、环境,完成JDBC存取MySQL的数据库study。为项目的库文件添加MySQL的驱动程序包mysql-connector-java.jar单击项目,选择Eclipse主菜单“project-Properities-Java Build Path-Liraries”14.4 JDBC中的主要接口和类Java应用程序访问数据库主要是通过JDBC API实现的,通过下面几个重要接口和类: DriverManager类 Connection接口 Statement接口 PreparedStatement接口 CallableStatement接口 ResultSet接口 ResultSetMetaD

24、ata接口 DatabaseMetaData接口 Java的基本数据类型和SQL中支持的数据类型对应关系。14.4.1 DriverManager类DriverManager类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 DriverManager 类直接继承自java.lang.object,其主要成员方法有:static Connection getConnetion(String url)通过指定url创建数据库连接static Conn

25、ection getConnetion(String url,String user,String password)通过指定url及用户、密码创建数据库连接JDBCURL格式标准语法::MySQL的JDBCURL格式: jdbc:mysql/hostname:port/dbname?param1=value1¶m2=value2. 例:jdbc:mysql:/localhost:3306/sample_db?user=root&password=mypassword 常见参数:user用户名password密码autoReconnect联机失败,是否重新联机(true/false)m

26、axReconnect尝试重新联机次数initialTimeout尝试重新联机间隔maxRows传回最大行数useUnicode是否使用Unicode字体编码(true/false)characterEncoding何种编码(GB2312/UTF-8/)relaxAutocommit是否自动提交(true/false)capitalizeTypeNames数据定义的名称以大写表示14.4.1 DriverManager类static Connection getConnetion(String url)public class Test public static void main(Stri

27、ng args) try Class.forName(com.mysql.jdbc.Driver);String url=jdbc:mysql:/localhost:3306/study?user=root&password=123;Connection conn=DriverManager.getConnection(url);Statement Stmt=conn.createStatement();String sqlQuery=select*from student;ResultSet rs=Stmt.executeQuery(sqlQuery);rs.next();String sn

28、ame=rs.getString(sname);System.out.println(sname);rs.close();Stmt.close();conn.close(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();14.4.1 DriverManager类static Connection getConnetion(String url,String user,String password)通过指定url及用户、密码创建数据库连接publ

29、ic class Test public static void main(String args) try Class.forName(com.mysql.jdbc.Driver);String url=jdbc:mysql:/localhost:3306/study;String login=root,password=“123;Connection conn=DriverManager.getConnection(url, login, password);Statement Stmt=conn.createStatement();String sqlQuery=select*from

30、student;ResultSet rs=Stmt.executeQuery(sqlQuery);rs.next();String sname=rs.getString(sname);System.out.println(sname);rs.close();Stmt.close();conn.close(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();14.4.2 连接SQL Server、Oracle和Access数据库的程序举例例14-3

31、通过创建好的数据源名studyDSN,连接Microsoft SQL Server2008或SQL Server 2008 express的数据库。例14-4 通过JDBC-ODBC驱动程序连接SQL Server 2008 express版本。但不必须事先建立ODBC的数据源名。省略了try-catch的主要代码如下:例14-5 从网站下载SQL Server2005或SQL Server 2008的sqljdbc_2.0驱动程序包 sqljdbc4.jar,并将此包放在用户应用能访问的类路径或项目的库路径中。机器名为localhost(本地机器),端口号为1030,数据库为study。省略

32、了try-catch的主要代码如下:例14-6 连接Oracle数据库。从网站下载Oracle驱动程序包classes12.zip,并将此包的路径放在classpath环境 变量中或放在项目的库路径中。连接数据库ORCL,机器的ip为192.169.0.20,端口号为1521。省略了try-catch的主要代码如下:例14-7 通过JDBC-ODBC连接access的数据库study.mdb.省略了try-catch的主要代码如下:14.4.3 Connection接口 Connection接口是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。Connection接口

33、的主要成员方法(请参见本书P266)Statement createStatement():创建一个Statement对象Statement createStatement(nt resultSetType,int resultSetConcuttency ):创建一个Statement对象,它将生成具有特定类型和并发性的结果集。 resultSetTypeTYPE_FORWARD_ONLY只能使用next()方法。TYPE_SCROLL_SENSITIVE可以上下移动,可以取得改变后的值。TYPE_SCROLL_INSENSITIVE可以上下移动。resultSetConcuttencyCO

34、NCUR_READ_ONLY只读CONCUR_UPDATABLEResultSet对象可以执行数据库的新增、修改、和移除例如:ResultSet对象中的光标上下自由移动 Statement stmt= con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet rs=stmt.executeQuery(select * from test);14.4.3 Connection接口Connection接口的主要成员方法void close():立即释放连接对象的数据库和JD

35、BC资源Boolean isClosed():测试是否已经关闭Connection类对象对数据库的连接。DatebaseMetaData getMetaData():建立DatabaseMetaData类对象(利用DatabaseMetaData类对象可以获得当前数据库以及驱动的信息 ,当前数据库中表的信息等)PreparedStatement prepareStatement(String sql):建立PrePraredStatement类对象。14.4.4 Statement接口Statement接口用于在已经建立的连接的基础上向数据库发送SQL语句的对象。它只是一个接口的定义,其中包括

36、了执行SQL语句和获取返回结果的方法。有3种 Statement 对象:StatementPreparedStatement(继承自Statement )CallableStatement(继承自PreparedStatement)它们都作为在给定连接上执行 SQL 语句的容器,每个都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。 创建statement对象的方法如下: Sta

37、tement stmt = con.createStatement(); Statement接口定义中包括的主要方法(请参见本书) Statement对象public class Test public static void main(String args) try Class.forName(com.mysql.jdbc.Driver);String url=jdbc:mysql:/localhost:3306/study?user=root&password=;Connection conn=DriverManager.getConnection(url);Statement Stmt

38、=conn.createStatement();String sqlQuery=select*from student;ResultSet rs=Stmt.executeQuery(sqlQuery);while(rs.next()System.out.print(rs.getString(sno)+t);System.out.print(rs.getString(sname)+t);System.out.print(rs.getString(ssex)+t);System.out.print(rs.getInt(sage)+t);System.out.println(rs.getString

39、(sdept); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();14.4.5 PreparedStatement接口PreparedStatement接口和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编译等待使用,当有单一的SQL指令需多次执行时,用PreparedStatement会比Statement效率更高。PreparedStatement接口的主要方法(请参见本书) ResultSet

40、MetaData getMetaData();取得ResultSet类对象有关字段的相关信息ResultSet executeQuery():使用SELECT命名对数据库进行查询。int executeUpdate():使用insertdeleteupdate对数据库进行新增、删除和修改操作。ResultSetMetaData getMetaData();取得ResultSet类对象有关字段的相关信息void setXXX(int parameterIndex,XXX x):给PreparedStatement类对象的IN参数设定为XXX类型的值,这里的XXX可为int、float、Strin

41、g、Date和Time。void setArray(int index,Array x):设置为数组类型。PreparedStatement对象执行带参数的SQL语句public class Test public static void main(String args) try Class.forName(com.mysql.jdbc.Driver);String url=jdbc:mysql:/localhost:3306/study?user=root&password=;Connection conn=DriverManager.getConnection(url);Prepared

42、Statement prepStmt=conn.prepareStatement(select*from student where ssex=?);prepStmt.setString(1, 男);ResultSet rs=prepStmt.executeQuery();while(rs.next()System.out.print(rs.getString(sno)+t);System.out.print(rs.getString(sname)+t);System.out.print(rs.getString(ssex)+t);System.out.print(rs.getInt(sage

43、)+t);System.out.println(rs.getString(sdept);rs.close();prepStmt.close();conn.close(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();14.4.6 CallableStatement接口与Java执行MySQL存储过程的程序举例CallableStatement接口用于执行对数据库已存储过程的调用。在CallableStatement对象中,有一个通用的成员方法ca

44、ll,这个方法以名称的方式调用数据库中的存储过程。在数据库调用过程中,可以通过设置IN参数向调用的存储过程提供执行所需的参数。另外,在存储过程的调用中,通过OUT参数获取存储过程的执行结果。 CallableStatement 接口的主要成员方法(请参见本书P268、269)例14-8 利用JDBC接口调用MySql的存储过程Query_Student和Query_Study1。 14.4.7 Java数据类型和SQL中支持的数据类型的对应关系 Java的基本数据类型和SQL中支持的数据类型有一定的对应关系。这种对应关系如表14-1所示(请参见本书P270)。14.4.8 ResultSet接

45、口ResultSet接口负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作;也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。ResultSet接口主要方法(请参见本书P270)boolean next():移动记录指针到结果集的下一条记录,若移动成功返回true.类型 get类型(int columnIndex)或者 类型 get类型(String columnName):读取结果集中当前行的指定字段值。boolean absolute(int row):移动记录指针到结果集的指

46、定的记录。void beforeFirst():移动记录指针到结果集的第一条记录之前。void afterLast():移动记录指针到结果集的最后一条记录之后。boolean first():移动记录指针到结果集的第一条记录。boolean last():移动记录指针到结果集的最后一条记录。boolean previous():移动记录指针到结果集的上一条记录。ResultSetMetaData getMetaData():取得ResultSetMetaData类对象。14.4.9 ResultSetMetaData接口 ResultSetMetaData接口的对象保存了所有ResultSet

47、类对象中关于字段的元信息,并提供许多方法来取得这些信息。 ResultSetMetaData接口中的方法int getColumnCount():取得ResultSet对象的字段个数。Int getColumnDisplaySize():取得ResultSet对象的字段长度。String getColumnName(int column):取得ResultSet对象的字段名称。String getColumnTypeName(int column):取得ResultSet对象的字段类型名称String getTableName(int column):取得ResultSet对象的字段所属数据表

48、的名称。14.4.10 DatabaseMetaData接口 DatabaseMetaData接口保存了数据库的所有特性,并且提供许多方法来取得这些信息。 DatabaseMetaData类的主要方法:String getDatabaseProductName(): 取得数据名称。String getURL():取得连接数据库的JDBC URL。String getUserName():取得登陆数据库的使用者账号。14.5基于C/S模式的学生信息数据库管理系统的开发本节利用前面建立的MySQL的数据库Study,对数据库中表student进行插入、修改、删除和查询的Java程序设计。这些程序设

49、计实例在设计时,考虑了通用性原则,应用了通用性的程序设计技术。其好处是:你可以利用本节示范的程序设计例子很容易编写访问其它数据库的Java应用程序。 14.5基于C/S模式的学生信息数据库管理系统的开发例14-9 利用前面建立的MySQL的数据库Study,对数据库中表student进行插入、修改、删除和浏览。开发学生信息管理系统时,程序设计时考虑原则包括以下两个方面。(1)数据库应用程序架构上,采用C/S的多次设计模式,使得程序结构清晰,各层功能相互独立,各个层次只能对其下层进行调用,使得整个系统易于维护和修改。整个学生的信息管理系统分为三层结构(从上层到下层)第1层,视图层(用户界面层):

50、用于管理信息的显示,是与用户交互的图形界面。第2层,数据库访问层:完成数据库的所有操作。第3层,实体层:对数据库的每个对象基表,都定义了Java中对应的实体类。(2)通用性原理,应用通用性的程序设计技术。其好处是:可以利用本节示范的程序设计例子很容易编写出Java访问其他数据库的应用程序。14.5.1 创建实体层Bean针对Study数据库中的表student,该表包含的字段有:学号Sno、姓名Sname、性别Ssex、年龄Sage和所在的系Sdept。编写student对应的实体类代码如下:/Student.java14.5.2 创建数据库访问层:插入、修改、删除和浏览访问数据库层由Stud

51、entManager.java和DBConnection.java组成。1.DBConnection.java的程序设计DBConnection类定义了访问MySQL数据库的打开连接和关闭操作。如果要连接其他类型的数据库,只要修改此类中的变量driverClassName和url的值就可以了,而不影响整个系统的其他代码。2.StudentManager.java的程序设计StudentManager类封装了访问student表的插入、修改、删除和查询操作。14.5.3创建用户图形界面层:主窗口、主菜单、插入、修改、删除和浏览用户图形界面层GUI,由主类Main.java、主窗口主菜单MainF

52、rame.java、插入记录界面AddStudentPanel.java、修改记录界面 UpdateStudentPanel.java、删除记录界面DeleteStudentPanel.java、浏览学生信息界面ListStudentPanel.java和公用界面StudentUI.java组成。其中StudentUI.java定义了一个学生信息的显示界面,可作为图形组件被组合在插入、修改、删除的图形界面中。下面分别介绍它们的程序设计特点。1.主类Main.java和主要窗口主菜单MainFrame.java程序设计2.编辑学生信息界面的通用类StudentUI的程序设计3.添加学生记录界面的

53、程序设计4.修改学生记录界面的程序设计5.删除学生记录的界面程序设计6.浏览学生所有记录的界面程序设计1.类JTableJTable组件属于javax.swing包,它能以二维表的形式显示数据。类JTable在显示数据时具有以下特点: (1)可定制性:可以定制数据的显示方式和编辑状态; (2)异构性:可以显示不同类型的数据对象,甚至包括颜色、图标等复杂对象;(3)简便性:可以以缺省方式轻松地建立起一个二维表。 使用类JTable显示数据之前,必须根据情况先生成定制的表格模型、单元绘制器或单元编辑器。类AbstractListModel用来定制用户自己的表格模型。 创建JTable的表格对象时,

54、将捆绑定制的表格模型。例如: JTable table = new JTable(dataModel); /dataModel是定制的表格模型对象 JScrollPane scrollpane = new JScrollPane(table); /将表格添加到可滚动的面板14.6 JTable组件与应用实例:以表格形式显示数据库内容2.类AbstractTableModel类AbstractTableModel,提供了TableModel接口中绝大多数方法的缺省实现。类AbstractTableModel隶属于javax.swing.table。该类是一个抽象类,没有完全实现,不能实例化,使用

55、时必须在程序中实现方法。要想生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面以下三个方法: public int getRowCount(); /得到表格的行数 public int getColumnCount(); /得到表格的行数 public Object getValueAt(int row, int column); /得到表格的第row行、第column列的单元值14.6 JTable组件与应用实例:以表格形式显示数据库内容14.6 JTable组件与应用实例:以表格形式显示数据库内容2.类AbstractTableModel例如,

56、我们可以建立一个简单二维表(1010),实现方法如下:TableModel dataModel = new AbstractTableModel() /定制自己的表格模型 public int getColumnCount() return 10; public int getRowCount() return 10; public Object getValueAt(int row, int col) return new Integer(row*col); ;JTable table = new JTable(dataModel);/捆绑定制的表格模型JScrollPane scrollp

57、ane = new JScrollPane(table); /将表格添加到可滚动的面板 例14-10以表格格式显示数据库的查询结果的程序设计。此程序运行时,用户能自定义要查询的SQL语句,包括单表查询、多表查询,有条件的查询、无条件的查询,以及对表的统计查询。运行的结果以二维表格的形式表现。程序设计思路如下:为了在用户界面上以二维表格形式表现查询结果,可以利用JTable表格类和AbstractTableModel表格模型类。用JTable类以二维表的形式显示,数据表格中的数据从表格模型 AbstractTableModel类的对象中获取。下面先介绍这两个类。14.6 JTable组件与应用实

58、例:以表格形式显示数据库内容例14-10以表格格式显示数据库的查询结果的程序设计。此程序运行时,用户能自定义要查询的SQL语句,包括单表查询、多表查询,有条件的查询、无条件的查询,以及对表的统计查询。运行的结果以二维表格的形式表现。程序设计思路如下:为了在用户界面上以二维表格形式表现查询结果,可以利用JTable表格类和AbstractTableModel表格模型类。用JTable类以二维表的形式显示,数据表格中的数据从表格模型 AbstractTableModel类的对象中获取。14.6 JTable组件与应用实例:以表格形式显示数据库内容在例14-10中,为了实现在表格中显示数据库的查询结果,用一个TableModel对象把ResultSet数据提供给JTable,在JTable中显示查询结果。 ResultSetTableModel类执行与数据库的连接和生成ResultSet对象。 DispalyQueryResults类创建GUI,并建立JTable的对象,并从ResultStTableModel的对象中获得数据。 14.6 JTable组件与应用实例:以表格形式显示数据库内容 ResultStTableModel类的构造方法接收三个参数:数据库驱动程序列的名称、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论