《Java面向对象程序设计(第4版)》课件chapter14 JDBC技术和数据库开发应用_第1页
《Java面向对象程序设计(第4版)》课件chapter14 JDBC技术和数据库开发应用_第2页
《Java面向对象程序设计(第4版)》课件chapter14 JDBC技术和数据库开发应用_第3页
《Java面向对象程序设计(第4版)》课件chapter14 JDBC技术和数据库开发应用_第4页
《Java面向对象程序设计(第4版)》课件chapter14 JDBC技术和数据库开发应用_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

教学目标14.1JDBC技术JDBC的体系结构JDBCAPI的主要类和接口简介14.2创建MySQL的数据库MySQL的安装和配置创建数据库study14.3Java应用程序通过JDBC存取数据库的过程应用JDBC存取数据库的步骤创建MyEclipse的项目实例:完成JDBC访问MySQL数据库study教学目标(续)14.4JDBC中的主要接口和类DriverManager类连接SQLServer、Oracle和Access数据库的程序举例Connection接口Statement接口PreparedStatement接口CallableStatement

接口与Java执行MySQL存储过程的程序举例Java数据类型和SQL中支持的数据类型的对应关系ResultSet接口ResultSetMetaData接口DatabaseMetaData接口教学目标(续)14.5基于C/S模式的学生信息数据库管理系统的开发创建实体层Bean创建数据库访问层:插入、修改、删除和浏览创建用户图形界面层14.6JTable组件与应用实例:以表格形式显示数据库内容14.1JDBC技术Java程序使用JDBC(JavaDatabaseConnectivity)API与数据库进行通信14.1.1JDBC的体系结构Java应用程序JDBCAPIJDBCDriverManager数据库驱动器Java应用程序数据库数据库数据库Java应用程序图14-1JDBC的体系结构14.1.2JDBC驱动程序类型1.JDBC-ODBCbridgeplusODBCdriver(类型1):JDBC-ODBC桥接驱动程序。其底层通过ODBC(OpendatabasConnectivity)驱动程序来连接数据库。2.Native-APIpartly-Javadriver(类型2):本地API-部份用Java来编写的驱动程序。此种方式先将JDBC函数调用转换成数据库客户端函数库的API(位于客户端计算机),然后与数据库相连。3.JDBC-NetpureJavadriver(类型3):JDBC网络纯Java驱动程序。首先JDBC驱动程序会将JDBC函数调用解释成与数据库无关的网络通信协议,经过中介服务器的第二次解析,最后才转换成相对应的数据库通信协议.4.Native-protocolpureJavadriver(类型4)本地协议纯Java驱动程序。这种驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。14.1.3JDBCAPI的主要类和接口简介JDBCAPI由一系列与数据库访问有关的类和接口组成,它们放在java.sql子包中。其中主要的类和接口有:DriverManager类:

Connection接口

Statement接口、与子类PreparedStatement、CallableStatement;ResultSet;CallableStatement接口

14.2创建MySQL的数据库MySQL的特点:最受欢迎的开源关系数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL被广泛地应用在Internet的中小型网站,具备体积小、速度快、总体拥有成本低,开放源码MySQL使用结构化查询语言SQL进行数据库管理和操作。免费下载网址:/downloads/14.2.1MySQL的安装和配置

1.下载Windows版的安装软件包:(1)MySql数据库管理软件:

mysql-essential-5.1.68-win32.msi(必备)(2)mysql的JDBC驱动程序:

mysql-connector-java.jar(必备)(3)mysql的图形化管理界面软件:

mysql-gui-tools-5.0-r17-win32.msi(可选)14.2.1MySQL的安装和配置

2.安装和配置MySQL软件(1)双击mysql-essential-5.1.68-win32.msi,将进入安装界面不断点击[Next],点击[Finish]后,开始配置服务器,在配置过程中:选择[StandardConfiguration]选项;[CharacterSet]选择字符集为[utf8]或[GBK];[ModifySecuitySetings]中,设置root账号的用户口令,如为root;其他选项选择默认值则可,直到最后点击[Execute]完成服务器配置。14.2.1MySQL的安装和配置

2.安装和配置MySql软件(2)MySQL安装完成后,在Windows桌面出现程序项:

“MySQL->MySqlServer5.1->MySQLCommandLineClient”

双击“MySQLCommandLineClient”,打开MySql的SQL命令行处理窗口:mysql-essential-5.1.68-win32.msi安装完成后,只能以DOS命令行方式使用。

14.2.1MySQL的安装和配置

2.安装和配置MySql软件(3)安装mysql-gui-tools-5.0-r17-win32.msi,安装完成后程序项出现:

单击“MySqlAdministrator”,将进入MySQL的图形化管理界面14.2.1MySQL的安装和配置

2.安装和配置MySql软件

单击“MySqlAdministrator”,将进入MySQL的图形化管理界面:14.2.1MySQL的安装和配置

2.安装和配置MySql软件

单击“MySqlAdministrator”,将进入MySQL的图形化管理界面:14.2.2创建数据库study

数据库Study存放着三张表student,course,sc:学生的基本信息student:学号、姓名、性别、年龄和所在系各字段组成;课程情况表course:课程号、课程名和学分各字段组成;学生学习各门课程的学习成绩sc:学号、课程号和学习成绩各字段组成。createdatabasestudy;usestudy;CREATETABLEcourse( cnochar(2), cnamechar(16), creditdecimal(2,1));insertintocoursevalues('c1','数据库',4);insertintocoursevalues('c2','数学', 2.5);insertintocoursevalues('c3','信息系统',4);insertintocoursevalues('c4','英语', 3);CREATETABLEstudent( snochar(5), snamechar(10), ssexchar(2), sageint, sdeptchar(20));insertintostudentvalues('20001','张小明','女',23,'信息系');insertintostudentvalues('20002','李强','男', 21,'计算机系');insertintostudentvalues('20003','王方','女',28,'信息系');insertintostudentvalues('20004','刘晨','男',18,'计算机系');CREATETABLESC(

Snochar(5),Cnochar(2),Gradedecimal(3,0)

);insertintoSCvalues('20001','c1',91);insertintoSCvalues('20001','c2',92);insertintoSCvalues('20001','c3',93);insertintoSCvalues('20001','C4',94);insertintoSCvalues('20002','c2',81);insertintoSCvalues('20002','c3',80);insertintoSCvalues('20004','C1',70);insertintoSCvalues('20004','C2',71);insertintoSCvalues('20004','C3',72);14.2.2创建数据库study

将study.sql文件拷贝到C盘根目录下,打开MySQLCommandLineClient,运行脚本命令:

sourcec:\study.sql14.3Java应用程序通过JDBC存取数据库的过程

本节首先介绍通过JDBC存取数据库的步骤,然后通过一个简单实例演示整个过程。14.3.1应用JDBC存取数据库的步骤Java应用程序通过JDBC存取数据库的步骤:

1.加载JDBC驱动程序,建立数据库连接

2.建立与执行SQL语句

3.处理结果集

4.关闭数据库连接1.加载JDBC驱动程序,建立数据库连接。加载JDBC驱动程序,语句格式:

Class.forName(Stringjdbc_driver);

例如:加载MySQL驱动程序的语句:

Class.forName("com.mysql.jdbc.Driver");使用DriverManger.getConnection(),建立一个新的数据库连接。方法格式:

ConnnetiongetConnection(StringconnURl,

StringloginName,Stringpassword);返回连接到特定数据库的Connnetion对象。connURl用来定义连接数据库的参数。

1.加载JDBC驱动程序,建立数据库连接。例14-1连接MySQL的数据库Study,用户名为”root”,口令为“root”。则建立数据库连接代码:try{

Class.forName("com.mysql.jdbc.Driver"); Stringurl="jdbc:mysql://localhost:3306/study";Stringlogin="root",password=="root";

Connectionconn=DriverManager.getConnection(url,login,password)}catch(ClassNotFoundExceptione){//输出捕获到的异常信息

e.printStackTrace();}catch(SQLExceptionsqlException){e.printStackTrace();}

2.建立SQL语句对象,执行查询

建立新数据库连接以后,必须先建立一个Statement对象才能执行SQL语句。

3种类型的Statememt:Statement、PreparedStatement和CallableStatement。

(1)使用Statement。示例如下:

StatementStmt=conn.createStatement();StringsqlQuery=“select*fromEmployee”;

ResultSetrs=Stmt.executeQuery(sqlQuery);2.建立SQL语句对象,执行查询(续)(2)使用PreparedStatement

用于处理预编译的SQL语句,可重复执行。

PreparedStatementprepStmt=

conn.prepareStatement("SELECT*FROMEmployee");

ResultSet

rs=prepStmt.executeQuery();

用WHERE限制SELECT语句的查询结果:

PreparedStatementprepStmt=conn.prepareStatement("SELECT*FROMEmployeeWHEREename=?")

prepStmt.setString(1,"SCOTT");

ResultSetrset=prepStmt.executeQuery();

3.建立SQL语句对象,执行查询(续)执行带2个参数的UPDATE语句,示例如下:

PreparedStatementprepStmt=conn.prepareStatement("UPDATEempSETsal=?WHEREename=?");prepStmt.setInt(1,100000);prepStmt.setString(2,"Rich");

prepStmt.executeUpdate();3.建立SQL语句对象,执行查询(续)(3)CallableStatement:调用数据库的存储过程,语法:

CallableStatement变量名=conn.prepareCall(“call存储过程名称”);示例:

CallableStatementcallStmt=conn.prepareCall("callupdate_salary(?,?)");

callStmt.setInt(1,7788);//设置要传入的第一个输入参数(?)值是7788callStmt.setInt(2,10000);

//设置要传入的第二个输入参数(?)值是10000

callStmt.execute();2.建立SQL语句对象,执行查询(续)

建立了Statement或PreparedStatement或CallableStatement对象之后,3种方法执行SQL语句:

executeQuery():执行select的SQL查询语句

executeUpdate():执行insert、delete、update更新语句,以及DDL语句。

execute():执行SQL语句。2.建立SQL语句对象,执行查询(续)//SQL查询语句ResultSetrset=stmt.executeQuery(SELECT*FROMemp);

//update语句stmt.executeUpdate("updateempsetage=age+1");//delete语句stmt.executeUpdate("deleteempforage=20");//DDL语句stmt.execute("CREATETABLEtable“+"(noCHAR(10),nameCHAR(10))");3.处理结果集可用while循环打印出ResultSet记录集内所有记录。

while(rs.next()){

System.out.println(rs.getInt(1));

System.out.println(rs.getString(2));}其中:1、2…表示结果集中的各字段相对位置。例如:

rs.getInt(1)

将读取结果集中第1个整型字段的的内容,也可以通过字段名读取内容,写成:

rs.getInt(“sno”)4.关闭数据库连接通过JDBC存取数据库时最后一个操作是关闭Connection、Statement、ResultSet等对象.rs.close();

stmt.close();con.close();14.3.2创建MyEclipse的项目实例:

完成JDBC访问MySQL数据库study

例14-2通过JDBC存取study数据库的course表。//JdbcExample.javaimportjava.sql.*;classJdbcExample1{publicstaticvoidmain(Stringargs[]){StringdriverClassName="com.mysql.jdbc.Driver";Stringurl= "jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8";Stringusername="root";Stringpassword="root";Connectionconn=null;try{ Class.forName(driverClassName);//加载JDBC驱动程序 //通过数据库连接

conn=DriverManager.getConnection(url,username,password); //建立SQL语句对象

Statementstatement=conn.createStatement(); StringsqlQuery="select*fromcourse"; ResultSetrs=statement.executeQuery(sqlQuery);//执行查询

while(rs.next()){//处理结果集

System.out.print(rs.getString(1)+","); System.out.print(rs.getString(2)+","); System.out.println(rs.getInt(3)); }

//关闭数据库连接

statement.close();conn.close();}//捕获异常

catch(SQLExceptionsqlException){JOptionPane.showMessageDialog(null,sqlException.getMessage(),"DatabaseError",JOptionPane.ERROR_MESSAGE);System.exit(1);}//detectproblemsloadingdatabasedrivercatch(ClassNotFoundExceptionclassNotFound){JOptionPane.showMessageDialog(null,classNotFound.getMessage(),"DriverNotFound",JOptionPane.ERROR_MESSAGE);System.exit(1);}}//endofmain}//endofclassc1,数据库,4c2,数学,2.5c3,信息系统,4c4,英语,314.3.2创建MyEclipse的项目实例:

完成JDBC访问MySQL数据库study在MyEclipse环境下,项目ch14的创建过程:(1)在MyEclipse环境下,创建JavaProject,起名为ch14。(2)为项目ch14的库文件[libraries]添加MySQL的JDBC驱动程序包:mysql-connector-java.jar;(3)在项目ch14中,创建类文件JdbcExample.java,输入正确的文件内容.(4)运行项目的Java应用程序。得到运行结果14.4JDBC中的主要接口和类Java应用程序访问数据库主要是通过JDBCAPI实现的,通过下面几个重要接口和类:

DriverManager类

连接SQLServer、Oracle和Access数据库的程序举例

Connection接口

Statement接口

PreparedStatement接口

CallableStatement接口

ResultSet接口

ResultSetMetaData接口

DatabaseMetaData接口

Java的基本数据类型和SQL中支持的数据类型对应关系。14.4.1DriverManager类DriverManager类在包java.sql,用于数据库驱动程序管理的类,在数据库和相应驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。

DriverManager类的主要成员方法:

static

Connection

getConnection(String

url);static

Connection

getConnection(String

url,String

user,String

password):14.4.2连接SQLServer、Oracle和Access数据库的程序举例

例14-3

通过创建好的数据源名studyDSN,连接MicrosoftSQLServer2008或SQLServer2008express的数据库。创建ODBC数据源:用window控制面板中数据源“ODBC”管理器,创建一个连接到SQLServer的数据源,名称为studyDSN,连接的数据库是study,用户为sa,口令为sa。创建好的数据源名studyDSN在下列程序中使用:14.4.2连接SQLServer、Oracle和Access数据库的程序举例

例14-3

实现代码如下:try{Stringurl="jdbc:odbc:studyDSN";Stringlogin="sa";Stringpassword="sa";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connectionconn=DriverManager.getConnection(url,login,password);}catch(SQLExceptionsqlException){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}14.4.2连接SQLServer、Oracle和Access数据库的程序举例

例14-4通过JDBC-ODBC驱动程序连接SQLServer2008express版本。但不必事先建立ODBC的数据源名。省略了try-catch的主要代码如下:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Stringurl="jdbc:odbc:Driver={SQLServer};Server=machineName"+"\\"+"SQLEXPRESS;Database=study;uid=sa;pwd=sa";Connectionconn=DriverManager.getConnection(connURL);其中:machineName是机器名或IP地址14.4.2连接SQLServer、Oracle和Access数据库的程序举例

例14-5从网站下载SQLServer2005或SQLServer2008的sqljdbc_2.0驱动程序包sqljdbc4.jar,并将此包放在用户应用能访问的类路径或项目的库路径中。机器名为localhost(本地机器),端口号为1030,数据库为study.

省略了try-catch的主要代码如下:

Stringurl="jdbc:sqlserver://localhost:1030;DatabaseName=study";Stringuser="sa", pwd="sa";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectionconn=DriverManager.getConnection(url,user,password);14.4.2连接SQLServer、Oracle

和Access数据库的程序举例

例14-6连接Oracle数据库。从网站下载Oracle驱动程序包classes12.zip,并将此包的路径放在classpath环境变量中或放在项目的库路径中。连接数据库ORCL,机器的ip为0,端口号为1521.省略了try-catch的主要代码如下:Stringurl="jdbc:oracle:thin:@0:1521:ORCL";Class.forName("oracle.jdbc.driver.OracleDriver");Connectionconn=DriverManager.getConnection(url,user,password);14.4.1DriverManager类例14-7通过JDBC-ODBC连接access的数据库study.mdb。省略了try-catch的主要代码如下:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=study.mdb";Connectionconn=DriverManager.getConnection(url);14.4.3Connection接口Connection接口是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。Connection接口的成员常用方法:(1)StatementcreateStatement():创建一个statement对象;

(2)

PreparedStatement

prepareStatement(String

sql)

创建PreparedStatement类对象;

(3)

voidclose():

立即释放连接对象的数据库和JDBC资源;14.4.4Statement接口Statement接口用于在已经建立的连接的基础上向数据库发送SQL语句的对象。3种类型的Statement对象:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。14.4.4Statement接口创建statement对象的方法如下:

Statementstmt=conn.createStatement();

Statement接口定义中包括的常用方法:

(1)ResultSet

executeQuery(String

sql)

使用SELECT命令对数据库进行查询,返回结果集;

(2)

int

executeUpdate(String

sql):

使用INSERT、DELETE、UPDATE对数据库进行新增、删除和修改记录操作;

(3)booleanexecute(Stringsql):执行SQL语句;

(4)void

close():结束Statement类对象对数据库的联机;

14.4.5PreparedStatement接口

PreparedStatement接口和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令需多次执行时,用PreparedStatement会比Statement效率更高。

PreparedStatement接口的常用方法:

(1) ResultSetexecuteQuery():使用SELECT命令对数据库进行查询;

(2) intexecuteUpdate()

:使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作;

(3)voidsetXXX(intparameterIndex,XXXx):给PreparedStatement类对象的IN参数设定为XXX类型的值x。

14.4.5PreparedStatement接口

PreparedStatement对象的创建方法:

PreparedStatementpstmt=con.prepareStatement("updatetbl_Usersetreward=?whereuserId=?");

例如:

(1)如果想给第一个注册的用户奖励5000点(userId=1,reward=5000):pstmt.setInt(1,5000);pstmt.setInt(2,1);

(2)如果想给前50个注册的用户每人5000点奖励:

pstmt.setInt(1,5000);for(inti=0;i<50;i++){pstmt.setInt(2,i);introwCount=pstmt.executeUpdate();} 14.4.6CallableStatement

接口

与Java执行MySQL存储过程的程序举例CallableStatement接口用于执行对数据库的存储过程。创建

CallableStatement对象的方法如下:

CallableStatementcstmt=con.prepareCall("callprocedure_name(?,?,?,…)");

其中(?,?,?,…)定义了存储过程的输入参数和(或)输出参数。setXXX方法:向存储过程传递输入参数(IN)值的。registerOutParameter方法:设置存储过程的OUT(输出)参数,getXXX方法:获取调用存储过程后的输出参数的值结果。

14.4.6CallableStatement

接口

与Java执行MySQL存储过程的程序举例例14-8利用JDBC接口调用Mysql的存储过程Query_Student和Query_Study1。打开MySQlCommandClientLine窗口,在数据库study中创建存储过程Query_Student和Query_Study1。定义不带参数的存储过程Query_Study1:usestudy;DELIMITER//CREATEPROCEDUREQuery_Study1()BEGINSELECTsname,sdept,sageFROMstudent;END//例14-8利用JDBC接口调用Mysql的存储过程Query_Student和Query_Study1。创建存储过程Query_Student的脚本内容如下:DELIMITER//CREATEPROCEDUREQuery_Student(INp_nochar(6),OUTp_namechar(20),OUTp_deptchar(10))BEGINSELECTsname,sdeptintop_name,p_deptFROMstudentWHEREsno=p_no;END//JdbcCallProcedure.java的主要代码:importjava.sql.*;importjavax.swing.*;classjdbcCallProcedure{publicstaticvoidmain(Stringargs[]){StringdriverClassName="com.mysql.jdbc.Driver";Stringurl= "jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8";Stringusername="root";Stringpassword="root";try{ Class.forName(driverClassName).newInstance(); Connectionconn=DriverManager.getConnection(url+"&user="+username+"&password="+password);

JdbcCallProcedure.java的主要代码:

//带有入口参数和出口参数的存储过程的调用,select的结果是单值

CallableStatementcallStmt=conn.prepareCall("{callQuery_Student(?,?,?)}");//设置要传入的第一个输入参数(?)值是20001callStmt.setString(1,"20001");//注册输出参数

callStmt.registerOutParameter(2,java.sql.Types.VARCHAR);callStmt.registerOutParameter(3,java.sql.Types.VARCHAR);

callStmt.execute();Stringb1=callStmt.getString(2);Stringb2=callStmt.getString(3);System.out.println("调用存储过程Query_Student的结果:");System.out.println(b1+","+b2);

JdbcCallProcedure.java的主要代码://存储过程的调用,select的结果是结果集合

System.out.println("调用存储过程Query_Study1的结果:");callStmt=conn.prepareCall("{callQuery_Study1}");

callStmt.execute();ResultSetrs=callStmt.getResultSet();while(rs.next()){System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3));}callStmt.close();conn.close();}//一定要捕获异常

catch(SQLExceptione){ e.printStackTrace();}catch(Exceptione){ e.printStackTrace();}}//endofmain}例14-8利用JDBC接口调用Mysql的存储过程Query_Student和Query_Study1。程序运行的输出结果如下:14.4.7Java数据类型

和SQL中支持的数据类型的对应关系Java的基本数据类型和SQL中支持的数据类型有一定的对应关系。这种对应关系如表14-1所示(请参见本书)。14.4.8ResultSet接口

结果集(ResultSet):存储SQL查询结果的对象,通过维护记录指针(Cursor)的移动,能操作结果集中的每一行记录;提供一组方法对数据库进行新增、删除和修改操作。ResultSet接口常用方法:① booleannext()

:移动记录指针到结果集的下一条记录,若移动成功返回true;② 类型get类型(intcolumnIndex):读取结果集中当前行的指定字段的值;

类型get类型(StringcolumnName)③ booleanabsolute(introw):移动记录指针到结果集的指定的记录;④ voidbeforeFirst()

:移动记录指针到结果集的第一条记录之前;

⑤ voidafterLast()

:移动记录指针到结果集的最后一条记录之后;14.4.8ResultSet接口ResultSet接口常用方法:⑥ booleanfirst():移动记录指针到结果集的第一条记录;⑦ booleanlast():移动记录指针到结果集的最后一条记录;⑧ booleanprevious():移动记录指针到结果集的上一条记录;⑨ ResultSetMetaDatagetMetaData():取得ResultSetMetaData类对象。14.4.9ResultSetMetaData接口

ResultSetMetaData接口的对象保存了所有ResultSet类对象中关于字段的元信息,并提供许多方法来取得这些信息。

ResultSetMetaData接口中的方法(请参见本书)

14.4.10DatabaseMetaData接口DatabaseMetaData接口保存了数据库的所有特性,并且提供许多方法来取得这些信息。

DatabaseMetaData类的主要方法(请参见本书)

14.5基于C/S模式的学生信息数据库管理系统的开例14-9利用MySQl的数据库Study,对数据库中表student进行插入、修改、删除和浏览。分为三层结构(从上层到下层):第1层:视图层(用户界面层):用于管理信息的显示,是与用户交互的图形界面。第2层:数据库访问层:完成与数据库的所有操作。第3层:实体层:对数据库的每个对象基表,都定义了Java中对应的实体类。14.5基于C/S模式的学生信息数据库管理系统的开例14-9利用MySQl的数据库Study,对数据库中表student进行插入、修改、删除和浏览。14.5.1创建实体层Bean

对Study数据库中的表Student完成输入、修改、删除的Java程序。这三个程序有相似的GUI,因此声明类StudentUI以封装该GUI。例13-2对Study数据库中的表Student完成增加记录的程序设计。程序由两个类AddStudentFrame和StudentUI组成。将StudentUI类放在子包UI中;在类AddStudentFrame中,用语句importUI.StudentUI;导入子包中类StudentUI。14.5.1创建实体层Bean对Study数据库中的表student,编写对应的实体类Student.java:publicclassStudent{

privateStringsno; privateStringsname; privateStringssex; privateintsage;

privateStringSdept; publicStringgetSno(){ returnsno; } publicvoidsetSno(Stringsno){ this.sno=sno; }.......14.5.2创建数据库访问层:插入、修改、删除和浏览

访问数据库层:由StudentManager.java和DBConnection.Java组成。

1.DBConnection类的设计:定义了访问MySql数据库的打开连接和关闭操作,如果要连接其它类型的数据库,只要修改类的变量driverClassName和url的值,而不影响系统的其他代码。14.5.2创建数据库访问层:插入、修改、删除和浏览

2.StudentManager.java类的程序设计:封装了访问student表的插入、修改、删除和查询操作。(1)继承父类DBConnection:用于DB的连接和关闭(2)构造方法中调用父类的连接方法,即在创建StudentManager对象时完成连接数据库操作。类的域变量Connectionconn在各方法中共享。(3)方法intexecUpdate(Stringsql):定义了对Student表进行更新操作,包括插入、修改、删除。入口参数是SQL语句的字符串,返回更新操作的结果,返回结果大于0则更新成功,为0则更新不成功,并及时关闭数据库连接。(4)方法List<Student>Query(StringsqlString):定义了对Student表查询的结果,并以List结构返回查询结果集,并及时关闭数据库连接。14.5.3创建用户图形界面层:主窗口、主菜单、插入、修改、删除和浏览

图形界面层GUI:主类Main.java、主窗口主菜单MainFrame.java:Main主类完成创建学生管理系统的主窗口对象,并使主窗口显示在屏幕居中。MainFrame.java定义了主窗口,在主窗口中创建显示主菜单,并给各菜单项注册事件监听处理对象。插入记录界面:AddStudentPanel.java修改记录界面:UpdateStudentPanel删除记录界面:DeleteStudentPanel.java浏览学生信息界面:ListStudentsPanel.java公用界面StudentUI.java:定义了一个学生信息的显示界面,可作为图形组件被组合在插入、修改和删除的图形界面中。类StudentUI设计思路类StudentUI完成输入记录的画面设计,其设计思路如下:(1)调用者利用StudentUI类构造方法的参数(字符型数组StringarrayString[]),传递输入记录画面上一组列的标题。在StudentUI类构造方法中,从数组arrayString的实例变量arrayString.length中可得到列的个数,并取出列的标题放在labels数组。(2)定义一组文本字段fields[]用于编辑一张表的记录各字段,并且调用者通过方法getFields()和setFields()可读取和设置fields值。(3)类StudentUI界面上提供两个通用Button按钮doTask1、doTask2,按钮的标签内容和按钮的事件处理过程,可通过调用者来设置。类StudentUI的程序代码14.6JTable组件与应用实例:以表格形式显示数据库内容

以二维表格形式表现查询结果:利用JTable表格类和AbstractTableModel表格模型类JTable类:以二维表的形式显示表格中的数据从表格模型AbstractTableModel类的对象中获取。1.类JTable

JTable组件属于javax.swing包,它能以二维表的形式显示数据。类JTable在显示数据时具有以下特点:

(1)可定制性:可以定制数据的显示方式和编辑状态;

(2)异构性:可以显示不同类型的数据对象,甚至包括颜色、图标等复杂对象;(3)简便性:可以以缺省方式轻松地建立起一个二维表。使用类JTable显示数据之前,必须根据情况先生成定制的表格模型、单元绘制器或单元编辑器。类AbstractListModel用来定制用户自己的表格模型。创建JTable的表格对象时,将捆绑定制的表格模型。例如:

JTabletable=newJTable(dataModel);//dataModel是定制的表格模型对象

JScrollPanescrollpane=newJScrollPane(table);//将表格添加到可滚动的面板2.类AbstractTableModel

类AbstractTableModel,提供了TableModel接口中绝大多数方法的缺省实现。类AbstractTableModel隶属于javax.swing.table。该类是一个抽象类,没有完全实现,不能实例化,使用时必须在程序中实现方法。要想生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面以下三个方法:

publicintgetRowCount();//得到表格的行数

publicintgetColumnCount();//得到表格的行数

publicObjectgetValueAt(introw,intcolumn);//得到表格的第row行、第column列的单元值2.类AbstractTableModel(续)例如,我们可以建立一个简单二维表(

温馨提示

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

评论

0/150

提交评论