第21章学生信息管理——三层结构数据库编程.ppt_第1页
第21章学生信息管理——三层结构数据库编程.ppt_第2页
第21章学生信息管理——三层结构数据库编程.ppt_第3页
第21章学生信息管理——三层结构数据库编程.ppt_第4页
第21章学生信息管理——三层结构数据库编程.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

1、第21章 学生信息管理三层结构数据库编程,能力目标: 能使用JDBC建立数据库连接,能编写Java代码连接数据库。 能编写添加、修改、删除数据库记录的程序代码。 理解表示层、业务逻辑层、数据层,理解三层结构的应用程序。 能编写三层结构的学生信息管理应用程序,并能打包发布。,内容介绍,21.1 任务预览 21.2 建立数据库 21.3 连接数据库 21.4 访问数据库 21.5 三层结构应用程序概述 21.6 三层结构学生信息管理程序 21.7 打包发布程序 21.8 本章小结 21.9 实训21:实现三层结构学生信息管理程序,21.1 任务预览,本章实训程序运行结果:,21.2 建立数据库,程

2、序数据和代码往往是分离的。 数据使用数据库存放,方便检索,持久保存,能按动态添加、修改和删除,并能共享。 数据库管理系统(DBMS)。流行的关系型DBMS: SQL Server Access Oracle MySQL等 每种DBMS有版本之分,如SQL Server有2000、2005、2008等版本,还有企业版、开发版、速成版等。,21.2.1 在DBMS上建立数据库,访问数据库之前先要建立数据库。 使用DBMS创建数据库优点: 操作直观 界面友好 互动性强 关于如何在DBMS上建立数据库,不在本书叙述范围。,21.2.2 运行SQL脚本建立数据库,以免费的SQL Server 2005

3、Express Edition(速成版)为例,通过SQL脚本创建数据库。 【例21-1】编写SQL脚本,建立学生数据库。数据库含有一个数据表,字段为:学号、姓名、性别、专业和年级。并使用脚本录入4条记录。 USE master GO if exists (select * from sysdatabases where name=Studb) drop database Studb GO CREATE DATABASE Studb GO,USE Studb CREATE TABLE Stus ( Num char(8) PRIMARY KEY, Name nvarchar(4) NOT NUL

4、L, Sex nchar(1) NOT NULL, Specialty nvarchar(7) NULL, Year int NULL, CHECK(Sex=男 or Sex=女 ), CHECK(Year=2000 and Year=2020) or Year=0), ) GO insert into Stus(Num,Name,Sex,Specialty,Year) values (12010001,赵益,男,软件技术,2012) insert into Stus(Num,Name,Sex,Specialty,Year) values (12010002,钱珥,女,软件技术,2012) i

5、nsert into Stus(Num,Name,Sex,Specialty,Year) values (12010003,孙散,男,软件技术,2012) insert into Stus(Num,Name,Sex) values (12010004,李四,男) GO,用记事本把脚本代码录入电脑,存盘为createstudb.sql。 设计算机已安装速成版SQL Server 2005,打开命令行窗口,进入脚本文件目录。 执行下面命令生成学生数据库Studb.mdf: sqlcmd -S .SQLExpress -E -i createstudb.sql,21.3 连接数据库,连接数据库之前先

6、要加载数据库驱动程序。通常是加载JDBC-ODBC桥驱动程序。代码如下: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); JDBC类似于ODBC,是API软件包java.sql,含有多个类和接口,常用的: Driver DriverManager Connection Statement PreparedStatement ResultSet,21.3.1 JDBC与JDBC-ODBC,JDBC 简介,Java使用JDBC(Java DataBase Connectivity)技术进行数据库的访问。使用JDBC技术进行数据库访问时,Java应用程序

7、通过JDBC API和JDBC驱动程序管理器之间进行通信,例如Java应用程序可以通过JDBC API向JDBC驱动程序管理器发送一个SQL查询语句。JDBC驱动程序管理器又可以以两种方式和最终的数据库进行通信:一种是使用JDBC/ODBC桥接驱动程序的间接方式;另一种是使用JDBC驱动程序的直接方式。,JDBC简介,JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。使用JDBC API,可以向各种关系数据发送SQL语句。 目前比较常见的JDBC驱动程序可分为以下4个种类: JDBC-ODBC桥加ODBC驱动程序 本

8、地API JDBC网络纯Java驱动程序 本地协议纯Java驱动程序,使用JDBC/ODBC桥接驱动程序,1. 载入驱动程序 使用JDBC/ODBC桥接驱动程序,该驱动程序的名称为sun.jdbc.odbc.JdbcOdbc- Driver,使用下面的语句将载入JDBC/ODBC桥接驱动程序: 2. 建立连接 使用下面的语句建立一个和数据库的连接:,java.sql包,JDBC做三件事:与数据库建立连接、发送 SQL 语句并处理结果。JDBC API包括一个框架(来自java.sql包),凭借此框架可以动态地安装不同驱动程序来访问不同数据源、执行SQL语句、处理结果集或更新数据记录等。,使用J

9、DBC API进行数据库操作步骤,导入JDBC API:首先利用import语句导入java.sql包。 装载驱动程序:针对不同DBMS,使用Class类的forName方法加载驱动程序类的支持。 建立数据库连接:使用DriverManager类的getConnection方法,指明数据库或数据源的url,以及登录DBMS的用户名及口令,创建数据库连接对象(Connection接口对象)。 创建JDBC Statements对象:使用已有的Connection数据库连接对象创建一个Statement对象,利用该对象把SQL语句执行适当的方法发送到DBMS。,5.执行语句:对SELECT语句来说

10、,使用executeQuery方法执行,返回结果是ResultSet类型的结果集:对INSERT、UPDATE、DELETE语句来说,使用executeUpdate方法执行,返回结果是影响的行数。 6.处理结果:对返回的结果集或影响行数进行处理,可以进行显示、判断等操作。 7.关闭资源:与各种对象创建的顺序相反,依次关闭ResultSet、Statement、Connection对象。,访问数据库,配置ODBC数据源 1. 在控制面板中,打开管理工具数据源(ODBC),弹出“ODBC数据源管理器”对话框,点击“系统DSN”选项卡,如图所示。该对话框中列出若干已经配置好的针对不同DBMS的系统数

11、据源。,访问数据库,配置ODBC数据源 2. 单击“添加”按钮,添加新的数据源,在打开的“创建新数据源”对话框中,根据使用的DBMS类型选择要安装数据源的驱动程序,这里选择“SQL Server”,如图所示。,访问数据库,配置ODBC数据源 3. 单击“完成”按钮,打开“创建到SQL Server的新数据源”对话框,在数据源名称文本框中填写“data”,在服务器下拉框中选择要连接的数据库服务器名,这里选择“(local)”(表示连接本机的数据库),如图所示。,访问数据库,配置ODBC数据源 4. 单击“下一步”,默认选择“使用网络登录ID的Windows NT验证”,如图所示。继续“下一步”,

12、选中“更改默认的数据库”复选框,然后在激活的下拉框中选择“pubs”数据库,如图所示。,访问数据库,配置ODBC数据源 5. 继续“下一步”,单击“完成”按钮,弹出“ODBC Microsoft SQL Server安装”信息对话框,如图,可以单击“测试数据源”按钮进行连接测试,确认无误后,点击“确定”,即完成数据源的设置。,21.3.3 通过数据源建立数据库连接,通过数据源StuDSN与学生库Studb建立连接: Connection con = DriverManager.getConnection(jdbc:odbc:StuDSN); DriverManager类建立连接的常用方法: (

13、1)static Connection getConnection(String url):试图建立与URL形式的数据库连接。url串的语法形式: jdbc:子协议:子名称 其中,jdbc是协议名,子协议有odbc或mysql等,子名称有数据源名称等。 (2)static Connection getConnection(String url, String user, String password):多了用户名和密码。,21.3.4 Connection连接,Connection是接口类型,连接对象只能通过DriverManager类的getConnection方法建立。 连接接口Conn

14、ection的常用方法: (1)Statement createStatement():创建语句对象。 (2)Statement createStatement(int resultSetType, int resultSetConcurrency ):创建语句对象,该对象将生成具有给定类型和并发性的ResultSet(结果集)对象。 参数resultSetType是结果集类型,取自下面3个ResultSet静态常量: ResultSet.TYPE_FORWARD_ONLY ResultSet.TYPE_SCROLL_INSENSITIVE ResultSet.TYPE_SCROLL_SENS

15、ITIVE,(3)PreparedStatement prepareStatement(String sql):创建预编译语句(对象)。 (4)PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)。 (5)void close():关闭连接,释放资源。 (6)void setAutoCommit(boolean autoCommit):设置连接对象是否自动提交。 (6)void commit():提交事务,实现数据更改。 (7)void rollback():回滚事

16、务。 注:默认连接对象自动提交,执行每个语句都会自动提交更改。如果禁用自动提交,那么要提交更改就必须显式调用commit方法。,21.4 访问数据库,(1)建立数据库。 (2)创建数据源。 (3)加载JDBC-ODBC桥驱动程序。 (4)建立数据库连接。涉及DriverManager和Connection。 (5)由连接创建语句对象。涉及Connection、Statement和PreparedStatement。 (6)通过语句对象执行SQL语句。涉及Statement、PreparedStatement和ResultSet。 (7)处理结果集。涉及ResultSet。 (8)关闭结果集、语

17、句和连接对象。涉及ResultSet、Statement、PreparedStatement和Connection。 (9)捕获、处理异常。涉及SQLException等。,21.4.1 数据库编程步骤,【例21-2】编写读取学生数据库Studb所有记录的Java程序。,import java.sql.*; public class Example2 public static void main() try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection conn= DriverManager.getConnection (jd

18、bc:odbc:StuDSN); Statement stmt=conn.createStatement(); /创建语句 ResultSet rs=stmt.executeQuery(select * from Stus); System.out.println(=学号=姓名=性别=专业=年级=); while(rs.next() /循环输出结果集各行内容 System.out.print(rs.getString(1) + t); /从1开始 System.out.print(rs.getString(2) + t); System.out.print(rs.getString(3) +

19、t); System.out.print(rs.getString(4) + t); System.out.println(rs.getInt(5); rs.close(); catch(Exception e) ,21.4.2 Statement语句,Statement是接口类型,只能通过连接对象createStatement方法创建语句对象。 语句对象执行静态SQL语句,返回结果集或int等数据。 Statement常用方法: (1)ResultSet executeQuery(String sql)。例如: Statement stmt=conn.createStatement(); R

20、esultSet rs=stmt.executeQuery(select * from Stus); (2)int executeUpdate(String sql):执行给定SQL更新语句。SQL更新语句一般是INSERT、UPDATE或DELETE等,返回更新的行数。 (3)boolean execute(String sql) (4)void close():关闭语句。,21.4.3 PreparedStatement预编译SQL语句,继承自Statement,也是接口类型。 优点: 预编译语句允许带参数,可以“动态”执行SQL语句。 只需预先编译SQL语句一次,就可多次执行,效率高。

21、PreparedStatement常用方法: (1)ResultSet executeQuery():预编译语句执行SQL查询,返回结果集。 (2)int executeUpdate():执行SQL更新语句。 (3)boolean execute():执行SQL语句。,(4)void setString(int parameterIndex, String x):将SQL语句中指定索引处的参数设置为String类型的x值。 SQL语句参数用“?”表示,索引从1开始。如带4个?参数: sql = update Stus set Name=?,Sex=?,Year=? where Num=?; p

22、rpstmt = conn.prepareStatement(sql); /创建预编译语句 prpstmt.setString(1, 郑丽); /设置第1个参数值 prpstmt.setString(2, 女); prpstmt.setInt(3, 2011); prpstmt.setString(4, 11010001); prpstmt.executeUpdate();,( 5)void setInt(int parameterIndex, int x):索引处参数设为int值。 (6)void setDouble(int parameterIndex, double x):索引处参数设置

23、为double值。 (7)void clearParameters():清除当前参数值。,21.4.4 ResultSet结果集,ResultSet也是接口类型,只能通过执行语句或预编译语句的executeQuery等方法创建结果集对象。 结果集与数据库表对应,由行(记录)、列(字段)组成。 结果集自带行光标(游标)。最初,光标置于第一行之前。 执行next方法光标下移一行。没有下一行时返回false,于是可使用while语句循环读各行数据。 结果集提供从当前行获取列值的方法,如getString(1)、getInt(5)或getString(Num)、getInt(Year), 注:方法ge

24、tXxx的列名参数不区分大小写,SQL语句也不区分大小写,但Java代码本身是严格区分大小写的。 默认结果集对象不可更新,仅有一个向前移光标。 创建语句对象时,可以给定参数,使之生成可滚动、可更新的结果集。,ResultSet常用方法,(1)boolean next():结果集光标下移一行。 (2)boolean previous():结果集光标上移一行。 (3)boolean first():光标移到结果集第一行。 (4)boolean last():光标移到结果集最后一行。 (5)void afterLast():光标移动结果集最后一行之后。 (6)void beforeFirst():光

25、标移动到结果集第一行之前。 (7)boolean absolute(int row):光标移到指定行号处。 (8)String getString(int columnIndex):获取集当前行指定列索引的字符串型列值。列索引从1开始。例如: System.out.print(rs.getString(1) + t); (9)String getString(String columnLabel):获取指定列名的字符串型列值。如: System.out.print(rs.getString(Num) + t);,(10)int getInt(int columnIndex):获取当前行指定列索

26、引的int值。 (11)int getInt(String columnLabel):获取指定列名的int值。 (12)double getDouble(int columnIndex) (13)double getDouble(String columnLabel) (14)boolean getBoolean(int columnIndex) (15)boolean getBoolean(String columnLabel) (16)void close():关闭结果集。 (17)int getRow():获取当前行编号。行号从1开始。 (18)boolean wasNull():判断最

27、后读取的列值是否为Null(空)。,【例21-3】编写插入、修改、删除学生记录的程序。,public class Example3 public static void main() Connection conn = null; Statement stmt = null; Statement stmt2 = null; PreparedStatement prpstmt = null; ResultSet rs = null; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); conn = DriverManager.getConnectio

28、n(jdbc:odbc:StuDSN);,stmt = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(select * from Stus); System.out.println(数据库原来的内容:); System.out.println(=学号=姓名=性别=专业=年级=); while(rs.next() /循环输出结果集各行内容 System.out.print(rs.getString(1) + t); /字段(列)号

29、从1开始 System.out.print(rs.getString(2) + t); System.out.print(rs.getString(3) + t); System.out.print(rs.getString(4) + t); System.out.println(rs.getInt(5); /插入一条记录: String sql = insert into Stus(num,name,sex,specialty) + values (11010001, 张三, 男, 网络技术) ; stmt2 = conn.createStatement(); /连接创建语句2 stmt2.

30、executeUpdate(sql); /语句2执行插入操作,/更改记录: sql = update Stus set Name=?,Sex=?,Year=? where Num=?; prpstmt = conn.prepareStatement(sql); /创建预编译语句 prpstmt.setString(1, 郑丽); prpstmt.setString(2, 女); prpstmt.setInt(3, 2011); prpstmt.setString(4, 11010001); prpstmt.executeUpdate(); /更新记录 /删除记录: sql = delete f

31、rom Stus where Num=?; prpstmt = conn.prepareStatement(sql); /创建预编译语句 prpstmt.setString(1, 12010004); prpstmt.executeUpdate(); /执行预编译语句删除记录,System.out.println(n更新后的内容:); System.out.println(=学号=姓名=性别=专业=年级=); rs.beforeFirst(); while(rs.next() /循环输出结果集各行内容 System.out.print(rs.getString(1) + t); catch(E

32、xception e) System.err.println(异常: + e); finally try if (rs != null ) rs.close(); /关闭结果集 if (stmt != null) stmt.close(); /关闭语句 if (stmt2 != null) stmt2.close(); /关闭语句2 if (prpstmt != null) prpstmt.close(); /关闭预编译语句 if (conn != null) conn.close(); /关闭连接 catch(SQLException se) JOptionPane.showMessageD

33、ialog(); ,注:连接、语句、结果集关闭顺序和创建顺序刚好相反。 三者之间的关系:结果集依赖语句,而语句又依赖连接。因为:连接创建语句,语句再创建结果集。,21.5 三层结构应用程序概述,逻辑上把应用程序代码分成若干个层次,例如二层、三层等。 各层之间相对独立,要求下层提供方法给上层调用,不能跨层操作。 通常,下层模块执行简单任务,上层模块通过调用多个下层模块,实现较为复杂的功能。 3层:表示层、业务逻辑层、数据层。 无论哪一层,对于Java程序,都是由类和接口组成。 开发应用程序时,一般从底层开始。,21.6 三层结构学生信息管理程序,本节运用三层结构编写学生信息管理程序,访问21.2

34、节建立的学生数据库。 对象/关系映射(O/R映射):将面向对象程序设计语言中的对象实体及实体之间的关系映射到关系数据库中的表及表之间的关系。 相对地,把关系数据库的数据模型映射到Java对象模型。 映射到数据库表或视图的类就是“实体类”。 实体类的对象映射为一条数据记录, 实体类的各个属性映射为记录的各个字段。 学生数据库只有一个数据表,只需编写一个映射实体类。,21.6.1 对象/关系映射,21.6.2 实体类与JavaBean,【例21-4】编写映射到学生数据库表(记录)的实体类。 public class Stu implements Comparable /也是JavaBean pri

35、vate String num; /学号 private String name; /姓名 private char sex; /性别 private String specialty; /专业 private int year; /年级 /public Stu() /默认构造方法 public String getNum() return num; public void setNum(String num) throws Exception if (num.matches(d8) this.num = num; else throw new Exception(学号必须为8位数字!); ,

36、public String getName() return name; public void setName(String name) throws Exception public char getSex() return sex; public void setSex(char sex) throws Exception public String getSpecialty() return specialty; public void setSpecialty(String specialty) public int getYear() return year; public voi

37、d setYear(int year) throws Exception public int compareTo(Stu otherStu) /比较顺序方法 return pareTo(otherStu.num); public String toString() /对象输出方法 return num + ,+ name+ , + sex + , + specialty + , + year; ,实体类是业务逻辑层代码,Java的实体类属于JavaBean。 JavaBean是完成特定功能的组件,主要提供给别的代码共享调用,本身不能独立运行。是代码片段。 JavaBean的特征有4个: (1

38、)JavaBean是一个或多个Java类。 (2)类中业务方法都是public的,对外提供调用。 (3)需提供无参数的构造方法。如果用于网络传输,还要实现Serializable接口。 (4)字段一般是private,要编写对字段读写的public方法。 字段读写方法的基本结构如下: public Type getXxx() return xxx; public void setXxx(Type xxx) this.xxx = xxx; ,21.6.3 数据层,是3层最底层,直接与数据库关联。 【例21-5】编写学生信息管理程序 的数据层。 import java.sql.*; import

39、java.util.Vector; import javax.swing.JOptionPane; public class StuDataAccess /数据层类 private static String driver = sun.jdbc.odbc.JdbcOdbcDriver; private static String url =jdbc:odbc:StuDSN; private static Connection conn; private Statement stmt; private PreparedStatement prpstmt; private ResultSet rs

40、;,private static Connection createConnection() /建立连接方法 tryif (conn = null | conn.isClosed() Class.forName(driver); /加载驱动程序 conn = DriverManager.getConnection(url); /建立连接 catch(Exception e) System.err.println(建立连接异常:+ e); return conn; private static void closeConnection() /关闭连接方法 try if(conn != null

41、catch(SQLException se) JOptionPane.showMessageDialog( ,private void closeResultSet() /关闭结果集方法 tryif (rs != null ) rs.close(); catch(SQLException se) JOptionPane.showMessageDialog(.); private void closeStatement() /关闭语句方法 try if (stmt != null ) stmt.close(); if (prpstmt !=null) prpstmt.close(); catch

42、(SQLException se) JOptionPane.showMessageDialog(); ,public Vector getAllRecords() /获取所有记录方法 Vector stus = new Vector(); /学生记录集 String sql = select * from Stus; try createConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while(rs.next() Stu stu = new Stu(); stu.setNum(rs.getSt

43、ring(Num); stu.setName(); stu.setSex(rs.getString(Sex).charAt(0); stu.setSpecialty(); stu.setYear(rs.getInt(Year); stus.add(stu); catch(Exception e) JOptionPane.showMessageDialog(); finally this.closeResultSet(); this.closeStatement(); closeConnection(); return stus; ,/按学号查找学生记录方法:找到,返回Stu对象,否则,返回nu

44、ll public Stu searchRecord(String num) /查找学生记录方法 Stu stu = null; String sql = select * from Stus where Num = ?; try createConnection(); prpstmt = conn.prepareStatement(sql); prpstmt.setString(1, num); rs = prpstmt.executeQuery(); if(rs.next() /如果查找到记录 stu = new Stu(); /构建学生对象 stu.setNum(rs.getString

45、(Num); catch(Exception e) finallycloseStatement(); closeConnection(); return stu; ,/添加一条学生记录方法:成功,返回1;不成功,返回0。 public int addRecord(Stu stu) /添加学生记录方法 String sql = insert into Stus(Num,Name,Sex,Specialty,Year) values (?,?,?,?,?); int recCount = 0; trycreateConnection(); prpstmt = conn.prepareStateme

46、nt(sql); prpstmt.setString(1, stu.getNum(); recCount = prpstmt.executeUpdate(); /执行更新 catch(SQLException se) finally closeStatement(); closeConnection(); return recCount; ,/修改一条学生记录:成功,返回1;不成功,返回0。 public int updateRecord(Stu stu) /修改学生记录方法 String sql = update Stus set Name=?,Sex=?,Specialty=?,Year=

47、? where Num=?; int recCount = 0; trycreateConnection(); prpstmt = conn.prepareStatement(sql); prpstmt.setString(1, stu.getName(); recCount = prpstmt.executeUpdate(); /执行更新 catch(SQLException se) finally closeStatement(); closeConnection(); return recCount; ,/删除一条学生记录:成功,返回1(更新语句数目);不成功,返回0。 public i

48、nt deleteRecord(Stu stu) /删除学生记录方法 String sql = delete from Stus where Num=?; int recCount = 0; trycreateConnection(); prpstmt = conn.prepareStatement(sql); prpstmt.setString(1, stu.getNum(); recCount = prpstmt.executeUpdate(); /执行更新 catch(SQLException se) finally closeStatement(); closeConnection()

49、; return recCount; ,21.6.4 业务逻辑层,【例21-5】继续编写学生管理程序的业务逻辑层代码。 public class StuBusinessLogic private static StuDataAccess dataAccess = new StuDataAccess(); /与数据层关联 private static Vector stus = new Vector(); /学生集 private static int total ; /元素总数 private static int stusIndex ; /索引 public StuBusinessLogic

50、() stus.clear(); stus = dataAccess.getAllRecords(); /调用数据层方法 total = stus.size(); stusIndex = 0; ,public static Vector getStus() /获取所有学生记录 if (stus.isEmpty() stus.clear(); stus = dataAccess.getAllRecords(); /调用数据层方法 total = stus.size(); return stus; public static Vector reGetDBAllRecords() /重获库记录 st

51、us.clear(); stus = dataAccess.getAllRecords(); /调用数据层方法 total = stus.size(); return stus; ,public static int getTotal() return total; /获取记录总数 public Stu getFirstStu() /获取学生集首记录 if (stus.size()0 ) stusIndex = 0; return stus.get(stusIndex); return null; public Stu getPreviousStu() /获取学生集上一记录 if (stus.

52、size()0 ) stusIndex-; if(stusIndex = -1) stusIndex = total - 1; return stus.get(stusIndex); return null; public Stu getNextStu() /获取学生集下一记录 public Stu getLastStu() /获取学生集尾记录 public Stu getCurrentStu() /获取学生集当前记录,/在学生集中查找对象,返回元素索引。为空或不存在则为-1 public int getIndex(Stu stu) /查找学生集元素 int index = -1; if (s

53、tu != null) for(int i=0; itotal; i+) if(stu.getNum().equals(stus.get(i).getNum() index = i; break; return index; /在学生集中添加一个元素(非空的学生对象): public void addStuObj(Stu stu) /添加学生集元素 if (stu != null) stus.add(stu); Collections.sort(stus); stusIndex = getIndex(stu); total +; ,/在学生集中修改元素(学生对象): public void u

54、pdateStuObj(Stu stu) /修改学生集元素 int index = getIndex(stu); if (index=0 ,/添加学生库记录:成功返回1;已存在返回0;无法添加返回-1 public int addStu(Stu stu) /添加学生库记录 int result = 0; if (stu = null) result = -1; result = dataAccess.addRecord(stu); if(result=1) addStuObj(stu); return result; /修改学生库记录:成功返回1;不成功返回0或-1 public int up

55、dateStu(Stu stu) /修改学生库记录 int result = 0; if (stu = null) result = -1; result = dataAccess.updateRecord(stu); if (result = 1) updateStuObj(stu); return result; /删除学生库记录:成功返回1;不成功返回0或-1 public int deleteStu(Stu stu) /删除学生库记录 ,StuBusinessLogic类位于程序的中间层,起承上启下作用: 表示层将直接引用该层,它则直接引用数据层。 StuBusinessLogic字段

56、suts用于存放所有学生对象,类型是泛型集合Vector,即suts是学生集,它对应数据库表的所有记录。 实体类Stu的对象则是一个学生对象,它只对应数据库表的一条记录。 StuBusinessLogic类成员方法中,除了通过数据层对数据库操作的方法,还有获取学生集suts的首、尾、上、下元素和当前元素等方法,这些方法将直接被表示层调用。 该类也定义了对学生集元素进行增、删、改的方法,供更新stus数据调用。,21.6.5 表示层,学生信息管理程序的表示层有3个类:主界面窗框类,添加、修改记录对话框类。还有程序入口主类。 【例21-6】编写学生信息 管理程序的主界面窗框类。,public cl

57、ass StuManFrame extends JFrame private static final long serialVersionUID =10L; /序列化版本号 private StuBusinessLogic stuLogic = new StuBusinessLogic() /关联业务逻辑层 private Stu stu = new Stu(); /实体类 private StuManFrame thisObj = this; /当前对象 private JLabel labelNum = new JLabel(学号:); /5个标签 private JTextField

58、textFieldNum = new JTextField(8); /5个只读文本框 private JButton buttonFirst = new JButton(首记录); /按钮 private JLabel labelInputNum = new JLabel(请输入学号:); private JTextField textFieldInputNum = new JTextField(8); private JButton buttonSearch = new JButton(查找); /按钮 private JButton buttonAdd = new JButton(添加); private JButton buttonUpdate = new JButton(修改); private JButton buttonDele

温馨提示

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

评论

0/150

提交评论