学生管理系统的数据库操作.ppt

上传人:牧羊曲112 文档编号:6564821 上传时间:2023-11-13 格式:PPT 页数:82 大小:223.50KB
返回 下载 相关 举报
学生管理系统的数据库操作.ppt_第1页
第1页 / 共82页
学生管理系统的数据库操作.ppt_第2页
第2页 / 共82页
学生管理系统的数据库操作.ppt_第3页
第3页 / 共82页
学生管理系统的数据库操作.ppt_第4页
第4页 / 共82页
学生管理系统的数据库操作.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《学生管理系统的数据库操作.ppt》由会员分享,可在线阅读,更多相关《学生管理系统的数据库操作.ppt(82页珍藏版)》请在三一办公上搜索。

1、使用Java开发数据库应用程序,单元4 学生管理系统的数据库操作,任务1 建立数据库及表 任务2 利用JDBC访问数据库 任务3 完善登录功能 任务4 向数据库添加学生信息 任务5 从数据库中删除学生信息 任务6 修改数据库中的学生信息,任务1 建立数据库及表,4.1.1 知识准备 工作过程,4.1.1 知识准备,1.数据库概念数据库是现代信息系统的核心技术。我们知道,信息系统中有大量需要持久存储、重复使用的数据,而数据库技术就是管理数据的工具,其管理的数据具有最小冗余度和较高的数据与程序的独立性,而且数据库能保证数据的安全性,维护数据的一致性。常用的数据库系统有Oracle、Sybase、D

2、B2、SQLServer、MySQL、Access等。我们使用SQL Server作为学习Java数据库编程技术的平台。在关系数据库中,数据库由一张张表组成,表又有多个字段。一个表中可以存储多条记录,类似于我们平常见到的表格,以行和列的形式来表示数据。表和表之间还可以有关联关系。,2.SQL语言SQL是一种数据库查询和编程语言,所有的主流数据库都可以使用SQL进行操作。我们想在Java编程环境中操作数据库,也需要使用SQL语句。根据使用功能,SQL语言主要有数据操作和数据定义两大类。本节子先介绍数据定义语句,数据操作语句在后面的子任务中再讲解。常用的数据定义语句是drop和create。(1)

3、drop语句格式删除数据库:drop 数据库名删除表:drop 表名(2)create语句格式新建数据库:create 数据库名新建表:create table 表名(字段名1 数据类型,字段名2 数据类型,)新建表时要指定字段类型,常用的类型有:,char(size):定长字符串,size是字符串的最大长度varchar:变长字符串int:整型float:实型datetime:日期时间型3.数据库表的设计分析学生管理系统,其主要功能是对学生基本信息和成绩信息进行管理,共需要建6张表,分别为用户表、学院表、班级表、学生表、课程表、成绩表。由于时间的原因,课堂上主要以学生信息的操作为例进行系统开

4、发,因此主要介绍前4张表。(1)用户表:记录用户信息,包括用户名、密码、用户类型,如表4.1所示。,表4.1 用户表(UserInfo),创建该表的SQL语句如下:Create table UserInfo(UserName varchar(20)primary key,Password varchar(20)not null,UserType char(10)not null)(2)院系表:记录院系信息,包括学院号和学院名,如表4.2所示。,表4.2 院系表(Department),建立该表的SQL语句如下:Create table Department(DeptId char(12)pri

5、mary key,DeptName varchar(30)not null)(3)班级表:记录班级信息,包含班号、班名、所属学院号3个字段,如表4.3所示。,表4.3 班级表(Class),建立该表的SQL语句如下:Create table Class(ClassId char(12)primary key,ClassName varchar(30)not null,DeptId char(12)not null),constraint Class_fk foreign key(DeptId)references Department(DeptId)(4)学生表:记录学生的基本信息,包括学生的

6、学号、姓名、性别等,如表4.4所示。,表4.4 学生表(Student),建立该表的SQL语句如下:Create table Student(StuId char(12)primary key,StuName varchar(20)not null,StuSex char(1)not null,Birthday datetime,Address varchar(60),ClassId char(12)not null,DeptId char(12)not null),constraint Student_fk1 foreign key(ClassId)references Class(Clas

7、sId),constraint Student_fk2 foreign key(DeptId)references Department(DeptId),工作过程,假定计算机上已经安装了SQLServer2005数据库管理系统,并且设置SQL Server身份验证方式下的登录名为sa,密码为sa。建立数据库及表的步骤如下:(1)启动SQL Server2005选择【开始】【所有程序】【Microsoft SQL Server2005】【SQL Server Management Studio】,在弹出的“连接到服务器”对话框中输入正确的登录信息,如图4.1所示。然后单击“连接”按钮,就会启动S

8、QLServer2005数据库服务器。(2)建立数据库在界面左侧的对象资源管理器中,选择“数据库”,右击选择“新建数据库”,如图4.2所示,在弹出“新建数据库”对话框中,在数据库名称一项中输入StuDB,单击“确定”按钮,则新建了一个数据库。,图4.1 启动SQL Server2005,图4.2 新建数据库,图4.3 新建用户表,(3)建立数据库表选择新建的StuDB数据库,单击其前面的“+”按钮,选择“表”,右击选择“新建表”,则弹出新建表的表格。在表中输入列名,选择类型,是否为空信息,然后在下一行单击继续输入下一列信息,直到输入表中的全部列信息。单击保存按钮,输入表名UserInfo,最后

9、单击“确定”按钮。这样我们就在新建的数据库StuDB中建立一张表UserInfo,如图4.3。(4)参考上面建表操作和前面所述的表说明,依次建立院系表、班级表和学生表。(5)为了便于数据操作,给每个表中都输入一些测试数据。,任务2 利用JDBC访问数据库,4.2.1 知识准备 4.2.2 工作过程,4.2.1 知识准备,1.JDBC简介JDBC是Java数据库连接(Java DataBase Connectivit)技术的简称,利用JDBC技术可以很方便地使用SQL语言操作各种数据库。JDK中提供JDBC功能的主要是java.sql包和javax.sql包。(1)JDBC数据库驱动数据库驱动程

10、序是连接不同数据库产品时,处理相关数据库的低层操作的代码。不同的数据库使用不同的驱动程序,通常由数据库厂商提供。SQL Server2005的驱动程序是一个压缩文件sqljdbc.jar,可以从微软官方网站上下载。(2)JDBC DriverManagerSun公司提供JDBC DriverManager类,它能够管理各种不同的JDBC驱动。,(3)JDBC APIJDBC API由Sun公司提供,提供了Java应用程序与各种不同数据库交互的标准接口,如Connection(连接)接口、Statement接口、PreparedStatement接口、ResultSet(结果集)接口等。开发者使

11、用这些JDBC接口进行各类数据库操作。2.JDBC基本编程模式开发一个JDBC程序,有以下基本步骤:(1)把JDBC驱动类装载入Java虚拟机中。通过调用Class.forName()方法,可以把给定的JDBC驱动类装载到Java虚拟机中。如果系统中不存在给定的类,则会引发异常,异常类型为ClassNotFoundException。代码示例:Class.forName(“JDBC驱动类的名称”);,(2)与数据库建立连接。DriverManager类调用getConnection()方法时,它会搜索整个驱动程序列表,直到找到一个能够连接到数据库连接字符串中指定的数据库的驱动程序,建立与数据库

12、的连接。此方法接收三个参数,分别为数据库连接字符串、用户名和密码。代码示例:Connection conn=DriverManager.getConnection(连接字符串,数据库用户名,密码);(3)创建Statement语句一旦连接建立,就使用该连接创建Statement接口的实例。使用Statement实例可以将SQL语句发送给它所连接的数据库并执行。代码示例:Statement stmt=conn.createStatement(sql);,(4)发送SQL语句,并得到结果。SQL操作语句可归为两大类,一类是增、删、改,返回的是整数,其值是受影响行数另一类是查询,返回的是结果集。St

13、atement的executeUpdate()方法,可以将增删改的SQL语句传递给它所连接的数据库,返回受影响行数。Statement的executeQurey()方法,可以将查询的SQL语句传递给它所连接的数据库,并返回类型为ResultSet的对象,它包含执行SQL查询的结果。代码示例:int i=stmt.execute(“insert into Table1 values(“1”,“2”,“3”);/执行插入语句ResultSet rs=stmt.executeQuery(“SELECT a,b,c FROM Table1”);/执行查询语句(5)处理结果。,执行查询,得到结果集Res

14、ultSet。使用ResultSet 对象的next()方法可将光标指向下一行。最初光标位于第一行之前,因此第一次调用next()方法将把光标置于第一行上。通过方法getXXX获取当前行中某列值,列名或列号可用于标识要从中获取数据的列。例如,如果数据表中第一行的列名为a,存储类型为整型,则可以使用两种方法获取存储在该列中的值,例如getInt(“a”)或rs.getInt(1)。如果到达结果集的末尾,则ResultSet的next()方法会返回false。处理结果的代码示例:while(rs.next()int x=rs.getInt(“a”);String s=rs.getString(“b

15、”);3.异常处理,异常是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。例如,数据库连接失败就会产生异常。Java语言使用异常处理机制为程序提供了错误处理的能力。Java使用try-catch-finally块捕获并处理异常,语法形式为:try/可能发生异常的代码catch(异常类型 e)/对异常进行处理的代码finally/总要被执行的代码,当try块中的代码发生异常时,会产生异常。异常是一类特殊的对象,当异常对象的类型与catch后的异常类型匹配时,则可以捕获到异常,此时catch块中的异常处理代码执行。而finally中的代码无论是否发生异常都会执行。,4.2.2 工作

16、过程,(1)在MyEclipse中打开StudentManager项目,加载JDBC驱动程序的jar包。学生管理系统用的数据库是SQL Server 2005,驱动程序是sqljdbc.jar。首先将sqljdbc.jar复制到项目中,然后在Package Explorer 中选中StudentManager项目节点,右击设置Java Build Path,点击Libraries标签页,单击“Add JARs”按钮,选择添加项目内的jar文件到类路径,则可以把jar包引入工程。(2)设计StuManager项目的目录结构,前面已经建了view包,界面类放在其中。在再项目下建立dao 包和ent

17、ity包,dao 包中放数据库操作类,entity包中放实体类。(3)新建BaseDao类,负责数据库的连接与关闭。,数据库的连接与关闭代码在每个例子中都是有共同之处的。我们把这些共同的东西抽象出来,封装成类,可以实现代码复用。新建BaseDao类,完成数据库的连接与关闭功能,。今后在连接和关闭数据库时,可以直接应用该类,类代码如下。,1 package dao;2 import java.sql.*;3public class BaseDao 4private static final String DRIVER_CLASS=“”;5private static final String D

18、BURL=“jdbc:sqlserver:/localhost:1433;DataBaseName=stuDB”;6private static final String USRENAME=“sa”;private static final String PASSWORD=“sa”;public static Connection getConnection()/返回数据库连接,910Connection dbConnection=null;11try 12Class.forName(DRIVER_CLASS);13dbConnection=DriverManager.getConnectio

19、n(DBURL,USRENAME,PASSWORD);14 catch(Exception e)15e.printStackTrace();1617return dbConnection;18 19public static void closeConnection(Connection dbConnection)/关闭数据库连接2021try,22if(dbConnection!=null 272829public static void closeStatement(PreparedStatement pStatement)/关闭语句2930try 31if(pStatement!=nul

20、l),32pStatement.close();33pStatement=null;3435 catch(SQLException e)36e.printStackTrace();3738 3940public static void closeResultSet(ResultSet res)/关闭结果集4142try 43if(res!=null)44res.close();45res=null;,(4)新建实体类UserInfo,在用户登录模块中,我们需要存储的对象是各个用户。因此,我们首先要创建一个类,代表用户,这个类中包含属性:用户名、密码、用户类型,并提供getter/setter方

21、法。这样的类我们称为实体类。一般情况下,实体类与数据表一一对应。选中entity包,新建一个类,类名为UserInfo,在代码中添加3个属性:userName,password,userType,然后在代码视图中单击右键,在右键菜单中选择“source”“Generate Getters and Setters”,选中3个属性的复选框,单击“ok”按钮,则会自动生成这些属性的公有访问方,4647 catch(SQLException e)48e.printStackTrace();4950,法。在右键菜单中选择“source”“Generate Constructor using Fields

22、”,可以自动生成带参数的构造方法。在右键菜单中选择“source”“Generate Constructors from Superclass”,可以自动生成带无参数的构造方法。UserInfo类的代码如下:,1package view;2public class UserInfo 3private String userName;/用户名4private String passsword;/密码5private String userType;/用户类型6public UserInfo()super();89public UserInfo(String userName,String pas

23、sword,String userType)10this.userName=userName;,11this.password=password;12this.userType=userType;1314public String getUserName()15return userName;1617public void setUserName(String userName)18this.userName=userName;1920public String getPassword()21return password;2223public void setPassword(String

24、password)24this.password=password;,2526public String getUserType()27return userType;2829public void setUserType(String userTypee)30this.userType=userType;3132,(4)新建UserDao类,包含插入新用户的方法int insertUser(UserInfo user1),1package dao;2import java.sql.*;3import java.util.*;,4import entity.UserInfo;5public c

25、lass UserDao 6 public static int insertUser(UserInfo user1)7Connection conn=null;8Statement stmt=null;9 int flag=0;10try 11conn=BaseDao.getConnection();12String name=user1.getUserName();13String pwd=user1.getPassword();14String type=user1.getUserType();15String sql=“insert into UserInfo values(“+nam

26、e+”,“+pwd+”,“+type+”)”;,16stmt=conn.createStatement();17flag=stmt.executeUpdate(sql);18 catch(SQLException se)19se.printStackTrace();20 finally 21BaseDao.closeConnection(conn);2223return flag;24,(5)新建UserTest类,在main方法中创建一个UserInfo对象,然后调用insertUser()方法,测试能否添加一个用户。,1public class UserTest2public static

27、 void main(String args),3 UserInfo user1=new UserInfo(“admin”,”123456”,”管理员”);3 flag=UserDao.insertUser(user1);4if(flag=1)5(“插入成功”);6else7(“插入失败”);89,(6)运行UserTest程序,则会添加一个指定的用户到数据库中的用户信息表中,并在控制台显示“插入成功”,运行结果如图4.4所示。,图4.4 测试结果,任务3 完善登录功能,知识准备 工作过程,知识准备,1.如何实现登录验证登录模块是所有系统的必备功能,在前面第3章的任务中,我们已经创建了登录窗体

28、,并实现了窗体按钮的单击事件,但是,当时用于进行用户验证的用户名、密码、身份类型是固定的,而在实际信息系统中,用户信息是存储在数据库中,因此需要判断用户输入的登录信息是否与数据库中的信息匹配。进行登录验证的基本思路是:(1)从登录界面中获取用户输入。(2)查询数据库,判断用户表中是否有该用户。(3)根据判断结果进行窗体跳转。,2.SELECT语句要进行查询操作,需要用到Select语句。Select语句的作用就是查询存储于数据库表中的数据。select语句的常用格式如下:select 字段1,字段2,from 表名 where 选择条件 order by 排序条件其中:位于select关键词之

29、后的字段名是指定作为查询结果返回的列表,用户可以按照自己的需要选择任意字段,还可以使用通配符“*”来表示表格中的所有字段。位于from关键词之后的表名是要进行查询操作的表格名称,可以是一张表,也可以是多张表。where子句是可选项,用于指定从表中查询数据的条件,从而决定哪些行将被作为查询结果返回或显示。,order by子句也是可选项,用于指定对输出结果进行排序的列名,默认是按升序排列,如果需要按降序排列,则在其排序字段后使用关键字desc。例如:查询所有男学生的学号和姓名,按年龄从大到小的顺序排列,则SQL语句为select stuNo,stuName form student where

30、stuSex=男 order by Birthday,知识准备,(1)在UserDao类中添加方法checkValid(UserInfo user),用于进行用户验证。该方法返回布尔型值,如果为真,则表示是合法用户,否则不是合法用户。方法代码如下:,1public static boolean checkValid(UserInfo user1)23Connection conn=null;4Statement stmt=null;5ResultSet rs=null;6boolean valid=false;try conn=BaseDao.getConnection();,9String

31、name=user1.getUserName();10String pwd=user1.getPassword();11String type=user1.getUserType();12String sql=“select*from UserInfo where username=“+name+”and password=“+pwd+”and userType=“+uType+”“;13stmt=conn.createStatement();14rs=stmt.executeQuery(sql);15 if(rs.next()16 valid=true;17 catch(SQLExcepti

32、on se)18se.printStackTrace();19 finally 20BaseDao.closeConnection(conn);2122return valid;23,1import entity.UserInfo;2import dao.UserDao;,(2)在登录界面loginFrame类的其它import语句后面,添加两个导入语句:,(3)修改登录界面的“确定”按钮的单击事件代码。,1jButtonConfirm.addActionListener(new()2public void e)3String name=jTextFieldName.getText();4St

33、ring pwd=new String(jPasswordFieldPwd.getPassword().trim();5String type=jComboBoxType.getSelectedItem().toString();6boolean valid=false;,7UserInfo user1=new UserInfo(name,pwd,type);8valid=UserDao.checkValid(user1);9if(valid)10JFrame jf=new MainFrame();11jf.setVisible(true);12dispose();1314else15JOpt

34、ionPane.showMessageDialog(null,”输入的登录信息错误”);16jTextFieldName.setText(“);17jPasswordFieldPwd.setText(“);18jComboBoxType.setSelectedIndex(0);,192021);,(4)运行登录界面,输入前面添加成功的用户信息,测试登录验证是否有效。,任务4 向数据库添加学生信息,知识准备 工作过程,知识准备,1.INSERT语句insert语句的作用是插入一行数据到数据库表中,insert语句的常用格式如下:insert into表名(列名表)values(对应列值表)其中:

35、表名是要插入数据的表名。列名表是一个可选项,用于指定要插入数据值的列名的列表。对应列值表是按照表定义或者列名表所规定的次序的列值表。insert语句的用法举例:插入一个用户名为zhangsan,密码为zhang123,用户类型为学生的用户到表UserInfo中,则使用的SQL语句为:insert into UserInfo values(zhangsan,zhang123,学生);,2.List接口和ArrayList类Java提供集合框架,存储对象数据。ArrayList可简单理解为可变大小的数组,ArrayList类实现了List接口。ArrayListList的常用方法:ArrayLis

36、t():构造方法,创建ArrayList对象add():添加对象到集合中size():返回集合的长度,即集合中对象的个数代码示例:,ArrayList list=new ArrayList();list.add(“北京”);list.add(“天津”);for(int i=0;ilist.size();i+)/循环输出集合中的对象 String s=(String)list.get(i);System.out.println(s);,工作过程,(1)在entity包下,创建院系实体类Department,定义属性deptId、deptName。从右键菜单中选择source,添加无参和有参构造方

37、法,以及getter/setter方法。属性变量如下:,1private String deptId;2private String deptName;,(2)创建班级实体类Class,包含属性classId、className、deptId,并生成所需方法。,1private String classId;2private String className;3private String deptId;,(3)创建学生实体类Student,包含8个属性,属性变量如下:,1private String stuId;2private String stuName;3private String

38、stuSex;4private Date birthday;5private String phone;6private String address;7private String deptId;8private String classId;,(4)创建DeptDao类,添加方法getAllDept()方法,功能是获取所有的院系名称。,1package dao;2import java.sql.*;3import java.util.List;4import java.util.ArrayList;5import entity.Department;6public class DeptDa

39、o 7public static List getAllDept()89List list=new ArrayList();10Connection conn=null;11Statement stmt=null;12 ResultSet rs=null;13 String sql=null;,14try 15conn=BaseDao.getConnection();16sql=“select*from Department”;17stmt=conn.createStatement();18rs=stmt.executeQuery(sql);19 while(rs.next()20 Depar

40、tment dept=new Department(rs.getString(“DeptId”),rs.getString(“DeptName”);21 list.add(dept);22 23 catch(SQLException se)24se.printStackTrace();25 finally 26BaseDao.closeConnection(conn);,2728return list;29 30,(5)创建ClassDao类,添加方法getClassByDeptName(String deptName)方法,功能是根据给定的院系名称得到所在院系的所有班级名称。,1packag

41、e dao;2import java.sql.*;3import java.util.List;4import java.util.ArrayList;5import entity.Class;6public class ClassDao 7public static List getClassByDeptName(String deptName),89List list=new ArrayList();10Connection conn=null;11Statement stmt=null;12 ResultSet rs=null;13 String sql=null;14try 15con

42、n=BaseDao.getConnection();16sql=“select ClassName from Class,Department where Class.DeptId=Department.DeptId and Department.DeptName=“+deptName+”“;17stmt=conn.createStatement();18rs=stmt.executeQuery(sql);19 while(rs.next()20 list.add(rs.getString(“ClassName”);,21 22 catch(SQLException se)23se.print

43、StackTrace();24 finally 25BaseDao.closeConnection(conn);2627return list;28,(6)在学生信息编辑类AddStu中导入需要的类,修改getCmbDept()方法,实现动态添加院系和班级,代码如下:,1private JComboBox getCmbDept()2if(cmbDept=null)3List list=DeptDao.getAllDept();4cmbDept=new JComboBox();,5cmbDept.addItem(“=请选择=“);6for(int i=0;ilist.size();i+)78cm

44、bDept.addItem(Department)list.get(i).getDeptName();/添加院系选项910cmbDept.setBounds(new Rectangle(115,214,136,26);11cmbDept.addItemListener(new()12public void e)13String name=cmbDept.getSelectedItem().toString();/获取所选院系名称,14List list=ClassDao.getClassByDeptName(name);/获取班级列表15jComboBoxClass.removeAllItem

45、s();16for(int i=0;ilist.size();i+)17jComboBoxClass.addItem(String)list.get(i);/添加班级选项1819 20);2122return cmbDept;23,(7)DeptDao类中写方法getDeptIdbyDeptName(),根据系部名称获取系部ID,代码如下:,1public static String getDeptIdbyDeptName(String deptName)2String deptId=null;3Connection conn=null;4Statement stmt=null;5 Resul

46、tSet rs=null;6 String sql=null;7try 8conn=BaseDao.getConnection();9sql=“select DeptId from Department where DeptName=“+deptName+”“;10stmt=conn.createStatement();11rs=stmt.executeQuery(sql);12 if(rs.next()13 deptId=rs.getString(1);,14 15 catch(SQLException se)16se.printStackTrace();17 finally 18BaseD

47、ao.closeConnection(conn);1920return deptId;21,(8)ClassDao类中写方法getClassIdbyClassName(),根据班级名称获取班级ID,代码如下:,1public static String getClassIdbyClassName(String className)2String classId=null;3Connection conn=null;,4Statement stmt=null;5ResultSet rs=null;6String sql=null;7try 8conn=BaseDao.getConnection(

48、);9sql=“select ClassId from Class where ClassName=“+className+”“;10stmt=conn.createStatement();11rs=stmt.executeQuery(sql);12 if(rs.next()13 14 classId=rs.getString(1);15 16 catch(SQLException se),17se.printStackTrace();18 finally 19BaseDao.closeConnection(conn);2021return classId;22,(9)创建StuDao类,增加

49、方法insertStudent(),功能是插入一个学生信息。代码如下:,1public static int insertStudent(Student stu)2Connection conn=null;3Statement stmt=null;4 int flag=0;5try 6conn=BaseDao.getConnection();,7String id=stu.getStuId();8String name=stu.getStuName();9String sex=stu.getSex();10SimpleDateFormat HMFromat=new SimpleDateForm

50、at(“yyyy-MM-dd hh:mm:ss”);11String birthday=HMFromat.format(stu.getBirthday();12String phone=stu.getPhone();13String address=stu.getAddress();14String deptId=stu.getDeptId();15String classId=stu.getClassId();16String sql=“insert into Student values(“+id+”,“+name+”,“+sex+”,“+birthday+”,“+phone+”,“+ad

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号