实验JDBC基础(3)
一、相关知识点
1、JDBC基本概念
2、JDBC数据增、删、改,事务控制等
二、实验目的:
理解Java连接数据库的基本概念。理解利用Statement对象、PreparedStatement对象进行增、删、改操作,理解事务的概念和JDBC编程方式。
三、实验内容:
1、利用Statement对象进行数据添加。
第一步:修改PublisherManager类的createPublisher方法,将其中的insert语言改成用Statement对象执行;
第二步:运行图书管理系统,进行添加出版社测试。
【实验结果与分析】
A、写出替换的代码部分。
Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql="select * from BeanPublisher where
pubid='"+p.getPubid()+"'";
java.sql.Statement st=conn.createStatement();
//st.setString(1,p.getPubid());
java.sql.ResultSet rs=st.executeQuery(sql);
if(rs.next()) throw new BusinessException("出版社编号已经被占用");
rs.close();
st.close();
sql="select * from BeanPublisher where
publisherName='"+p.getPublisherName()+"'";
st=conn.createStatement();
// st.setString(1, p.getPublisherName());
rs=st.executeQuery(sql);
if(rs.next()) throw new BusinessException("出版社名称已经存在");
rs.close();
st.close();
sql="insert into BeanPublisher(pubid,publisherName,address) values('"+p.getPubid()+"','"+p.getPublisherName()+"','"+p.getAddress(
)+"')";
st=conn.createStatement();
//st.setString(1, p.getPubid());
//st.setString(2, p.getPublisherName());
//st.setString(3,p.getAddress());
st.execute(sql);
st.close();
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
2、利用insert语句添加数据时,未指定字段值处理。
第一步:运行图书管理系统,打开读者类别管理界面,并尝试添加一个读者类别;系统将会报一个错误,请分析说明错误原因。
reader.Typeid 是主码,不能为空
第二步:通过数据库表结构的修改,解决上述问题。并用同样的方式解决图书借阅功能的bug。
打开企业管理器;
打开beanreadertype 表;
打开设计表;
将标识改成是;
第三步:如果表结构不修改,应该如何修改程序,使新增读者类别的ID为表中现有数据的最大ID值+1。
public void createReaderType(BeanReaderType rt) throws BaseException{ if(rt.getReaderTypeName()==null ||
"".equals(rt.getReaderTypeName()) ||
rt.getReaderTypeName().length()>20){
throw new BusinessException("读者类别名称必须是1-20个字");
}
if(rt.getLendBookLimitted()<0 || rt.getLendBookLimitted()>100){ throw new BusinessException("借阅图书数量必须在0-100之间");
}
Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql="select * from BeanReaderType where readerTypeName=?";
java.sql.PreparedStatement pst=conn.prepareStatement(sql);
pst.setString(1, rt.getReaderTypeName());
java.sql.ResultSet rs=pst.executeQuery();
if(rs.next()) throw new BusinessException("读者类别名称已经被
占用");
rs.close();
pst.close();
sql="select max(readerTypeId)from BeanReadertype";
int i=1;
pst=conn.prepareStatement(sql);
rs = pst.executeQuery();
//id=rs.getint +1;
if(!rs.next()){//是否已经有id
i=1;
}
else{
i+=rs.getInt(1);
}
sql="insert into
BeanReaderType(readerTypeId,readerTypeName,lendBookLimitted) values(?,?,?)";
pst=conn.prepareStatement(sql);
pst.setInt(1,i);
pst.setString(2, rt.getReaderTypeName());
pst.setInt(3,rt.getLendBookLimitted());
pst.execute();
rs.close();
pst.close();
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
finally{
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、利用PreparedStatement对象进行数据修改。
在SystemUserManager类中,新建一个modifyUserName方法,实现用户名称(username字段)的修改功能。并修改其main函数,将admin用户的名称改为:超级管理员。
【实验结果与分析】
A、请提供方法代码和main函数代码。
public void modifyUserName(String username)throws BaseException{ Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql = "update beansystemuser set username = '"+username+"' where userid='admin'";
java.sql.Statement st=conn.createStatement();
int rs = st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
finally{
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
BeanSystemUser user=new BeanSystemUser();
user.setUserid("admin");
user.setUsername("系统管理员");
user.setUsertype("管理员");
try {
new SystemUserManager().modifyUserName("超级管理员");
} catch (BaseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
B、思考:如果上述方法的返回值为布尔类型,即如果成功修改了用户名称,则返
回true,如果用户不存在或修改失败返回false。应该如何完善代码。提示:主
要statement或PreparedStatement对象的execute方法和executeUpdate方法的区
别。
public static void main(String[] args){
BeanSystemUser user=new BeanSystemUser();
user.setUserid("admin");
user.setUsername("系统管理员");
user.setUsertype("管理员");
try {
new SystemUserManager().modifyUserName("超级管理员1");
} catch (BaseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void modifyUserName(String username)throws BaseException{ Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql = "update beansystemuser set username = '"+username+"' where userid='admin'";
java.sql.Statement st=conn.createStatement();
boolean rs = st.execute(sql);
if(rs == true)
System.out.print("ok");
else
S ystem.out.print("no");
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
finally{
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4、Delete语句的执行。修改用户管理类中的用户删除方法,用删除数据库表中数据的形
式代替现有软删除模式。
【实验结果与分析】
A、修改后的sql语句部分是。
sql="delete BeanSystemUser where userid=?"; //delete BeanSystemUser where userID='001'
B、如果对删除函数进行限制,要求不能删除已经有过借阅操作的用户。应如何修改代码。提示:可参考读者管理类中的读者类别删除方法。
public void deleteUser(String userid)throws BaseException{
Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql="select removeDate from BeanSystemUser where userid=?";
java.sql.PreparedStatement pst=conn.prepareStatement(sql);
pst.setString(1,userid);
java.sql.ResultSet rs=pst.executeQuery();
if(!rs.next()) throw new BusinessException("登陆账号不存在");
if(rs.getDate(1)!=null) throw new BusinessException("该账号已经被删除");
rs.close();
pst.close();
sql="select * from BeanBookLendRecord where
lendOperUserid=?";
pst=conn.prepareStatement(sql);
pst.setString(1,userid);
rs=pst.executeQuery();
if(!rs.next()){
sql="delete BeanSystemUser where userID=?";
pst=conn.prepareStatement(sql);
pst.setString(1, userid);
pst.execute();
pst.close();
}
else{
throw new BusinessException("该账号已有借阅信息,不能删除");
}
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
finally{
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5、在数据库中建立一张BeanBookLendRecord_backup表,用于保存已经归还图书的借阅
记录。其表结构与BeanBookLendRecord表完全一致。要求在借阅管理类中,增加方法,实现已经归还数据的备份功能(备份完成后,在原表中删除备份成功的数据)。
提示:注意事务控制。
【实验结果与分析】
A 请提供备份表的建表语句
select * into BeanBookLendRecord_backup from BeanBookLendRecord
B 请提供备份函数代码
public void a()
{
java.sql.Connection con = null;
try {
con = DBUtil.getConnection();
String sql = "insert into BeanBookLendRecord_backup select * from BeanBookLendRecord";
java.sql.Statement st = con.createStatement();
java.sql.ResultSet rs = st.executeQuery(sql);
sql="delete from BeanBookLendRecord";
st=con.createStatement();
rs=st.executeQuery(sql);
}catch(SQLException e)
{
e.printStackTrace();
}
finally
{
if( con != null)
{
try {
con.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
6、如果需要记录图书的入库时间(需要包含时分秒),应如何修改数据库表结构和相关
代码?
【实验结果与分析】
在bookbeak中添加:localdate
if(b.getBarcode()==null || "".equals(b.getBarcode()) || b.getBarcode().length()>20){
throw new BusinessException("条码必须是1-20个字");
}
if(b.getBookname()==null || "".equals(b.getBookname()) || b.getBookname().length()>50){
throw new BusinessException("图书名称必须是1-50个字");
}
Connection conn=null;
try {
conn=DBUtil.getConnection();
String sql="select * from BeanBook where barcode=?";
java.sql.PreparedStatement pst=conn.prepareStatement(sql);
pst.setString(1, b.getBarcode());
java.sql.ResultSet rs=pst.executeQuery();
if(rs.next()) throw new BusinessException("条码已经被占用");
rs.close();
pst.close();
sql="insert into
BeanBook(barcode,bookname,pubid,price,state,localdate)
values(?,?,?,?,'在库',?)";
pst=conn.prepareStatement(sql);
pst.setString(1, b.getBarcode());
pst.setString(2, b.getBookname());
pst.setString(3, b.getPubid());
pst.setDouble(4, b.getPrice());
pst.setTimestamp(5, new
java.sql.Timestamp(System.currentTimeMillis()));
pst.execute();
pst.close();
} catch (SQLException e) {
e.printStackTrace();
throw new DbException(e);
}
finally{
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
《数据库系统设计与开发》 模拟实习教学大纲 (Database System Design and Development) 制定单位:工学院计算机科学与技术系 制定人:课程组 编写时间:2016年01月06日
第一部分课程概述 一、基本信息 (一)课程代码 课程代码:07110640 (二)课程属性、学分、学时 计算机专业的专业模拟实习、独立实验、2学分、40学时 (三)适用对象 本课程适用的对象为计算机科学与技术专业的本科生 (四)先修课程与知识准备 《C/C++程序设计》,《数据库原理》,《.Net编程》,《软件工程》 二、实验简介 《数据库系统设计与开发》模拟实习以数据库应用系统的设计与开发为主要目标,结合本专业的多门专业课程:《程序设计》、《数据结构》、《数据库原理》、《面向对象程序设计》、《.Net编程》、《软件工程》等开展专业模拟实习。《数据库系统设计与开发》模拟实习将针对一个现有的数据库应用领域,遵照《软件工程》课程中的生命周期法和软件开发规范进行系统分析与设计,按照《数据库原理》中的关系规范化理论进行数据库的模式设计,并结合《.Net编程》所学基于C#语言及.Net集成开发环境进行系统编码与调试,完成一个小型数据库应用系统的开发任务。最后,通过提交实习报告,提高学生科技论文的撰写能力。通过这一完整的实践教学过程,将进一步加强学生实践和动手能力的培养,真正理解和掌握数据库系统设计和开发的方法,提高学习效果,使学生可以学以致用,成为具有专业技能并有一定实际经验的人才。
三、实验项目 实验一:系统需求分析(4学时) (一)实习(实验)类型 综合性实验。 (二)实习(实验)目的和要求 1.理解需求分析在软件工程应用中的重要性 2.熟悉数据库建模的方法 3.掌握如何将客户的实际需求转化为描述性设计语言 (三)实习(实验)内容 为将要开发的系统作出一份明确、详细的需求分析报告。需求分析报告至少应该包含以下几部分: 1.系统的名称; 2.系统概述; 3.系统要实现哪些功能,每个功能的具体描述。 (四)实习(实验)地点 竞秀楼或竞慧楼机房 实验二:系统设计(4学时) (一)实习(实验)类型 综合性实验。 (二)实习(实验)目的和要求 1.掌握SQL Server数据库管理软件的使用,学习CASE工具(Visio或SA2001)的使用,用信息系统开发工具(例如VS2008)设计一个实用的中小型管理信息系统2.掌握系统设计的基本方法,提高解决实际问题、开发信息系统的实践能力 (三)实习(实验)内容 用信息系统开发工具(例如VS2008)设计一个实用的中小型管理信息系统。 1.根据实验时间选择适当规模大小的设计课题 2.根据合理的进度安排,按照软件工程系统开发的流程及方法,进行实验 3.实验过程中,根据选题的具体需求,在开发各环节中撰写相关的技术文档,最后要
实验三JDBC基础(2) 一、相关知识点 1、JDBC基本概念 2、JDBC简单查询、preparedstatement、连接查询、集函数查询等 Odbc: Jdbc:
二、实验目的: 理解Java连接数据库的基本概念。理解Statement对象、PreparedStatement对象和ResultSet对象。 三、实验内容: 1、游标滚动模式试验。 第一步:将RsTest类放入对应的工程包中https://www.wendangku.net/doc/a611158278.html,.zucc.booklib.rstest; 第二步:在BeanSystemUser表中增加一些测试数据; 第三步:运行程序,并查看执行结果。 第四步:将游标滚动模式改成TYPE_SCROLL_SENSITIVE,运行程序,并查看结果 【实验结果与分析】 A、第三步、第四步运行结果截图?并说明区别。 第三步: 第四步:修改前
第四步:修改后 B、
2、利用ResultSet对象进行数据修改 第一步:将RsTest2类放入对应的工程包中https://www.wendangku.net/doc/a611158278.html,.zucc.booklib.rstest;
第二步:运行程序,并查看执行结果。 第三步:删除rs.updateRow(); 允许程序,并查看执行结果 【实验结果与分析】 A、请给出第二步、第三步的执行截图。说明区别,并分析原因。 第二步: 第三步: 3、利用PreparedStatement对象修改实验二的两个对出版社的查询。 第一步:在实验二的基础上,把传入的查询条件(出版社名称)改成带单引号的字符串,并运行程序。查看执行结果。 第二步:将原来的查询函数,改成用PreparedStatement。运行程序,查看执行结果。通用把传入的查询条件(出版社名称)改成带单引号的字符串,并运行程序。查看执行结果。 【实验结果与分析】 A、第一步执行结果截图。
实验4数据查询 一、实验目的 1.掌握使用Transact-SQL的SELECT语句进行基本查询的方法。 2.掌握使用SELECT语句进行条件查询的方法。 3.掌握嵌套查询的方法。 4.掌握多表查询的方法。 5.掌握SELECT语句的GROUP BY和ORDER BY子句的作业和使用方法。 6.掌握联合查询的操作方法。 7.掌握数据更新语句INSERT INTO、UPDATE、DELETE的使用方法。 二、实验准备 1.了解SELECT语句的基本语法格式和执行方法。 2.了解嵌套查询的表示方法。 3.了解UNION运算符的用法。 4.了解SELECT语句的GROUP BY和ORDER BY子句的作用。 5.了解IN、JOIN等子查询的格式。 6.了解INSERT INTO、UPDATE、DELETE的格式与作用。 三、实验内容及步骤 0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码 1.在studentsdb数据库中,使用下列SQL语句将输出什么? (1)SELECT COUNT(*) FROM grade (2)SELECT SUBSTRING(姓名,1,2) FROM student_info (3)SELECT UPPER('kelly')
(4)SELECT Replicate('kelly',3) (5)SELECT SQRT(分数) FROM grade WHERE 分数>=85 (6)SELECT 2,3,POWER(2,3) (7)SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()) 2.在studentsdb数据库中使用SELECT语句进行基本查询。 (1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。 SELECT*FROM student_info (2)查询学号为0002的学生的姓名和家庭住址。 SELECT姓名,家庭住址FROM student_info WHERE学号=0002 (3)找出所有男同学的学号和姓名。 SELECT学号,姓名FROM student_info
数据库系统设计实验报告 ――教务管理系统 学院:计算机科学与技术 专业:软件工程 班级: 学号: 姓名: 指导老师:
一、概述 项目背景:数据库课程设计 系统名称:教务管理系统 开发环境:SQL Server 2008 二、需求分析 1、系统的概述 ?一个学校由很多个学院组成,每个学院有多个专业,每个专业有1个或 者多个班级。一个学生只属于1个班级,学生有姓名、学号、性别、身 份证号、入学时间等属性。 ?每个专业的每个年级都有对应的教学计划。教学计划指定了这个专业这 个年级的某门课程在那个学期上,学分、学时是多少。每个学院都设置 有1个教务秘书,这些信息都由教务秘书进行输入。每个院系的课程都 有自己的唯一编码,比如计算机系上的C语言,和电子系上的C语言, 虽然都是同一门课,但是编码是不同的。但是同一个院系中的相同的课 程,课程代码是唯一的。比如计算机学院的07计算机软件专业和计算机 学院的07计算机科学专业都有C语言课程,这两门课程的课程代码是相 同的。 ?教务秘书在每个学期的中间时刻,为下一个学期进行排课,排课的内容 根据教学计划,比如08计算机软件专业的学生,在2009-2010年第2 学期上的课程,可以通过教学计划得知要上什么课程,然后对这些课程 安排上课教师(比如陈越)、上课时间(比如星期2,第1-2节)和地点 (理工楼234),有的课程是单周上,有的双周,也有是每周都上的。 ?在每个学期期末,学生登录到网站上选择下一个学期需要上的课,选择 的时刻,可以选择是否需要教材,如果某门课程的人数选满了,则不能 给任何学生选择了。 ?学生根据选择的课程进行上课,参加考试。每个老师可以用自己的用户 名和密码登陆网站,选择这个学期自己所教的课程(一个老师可以上多 个班级的课程),输入这个班级的成绩,成绩分为期末考试成绩、期中考 试成绩、平时成绩、实验成绩以及总评成绩。这些成绩都需要进行存储。 ?为了保证安全性,老师输入的成绩并不是直接放到最终的成绩表中,而 是放在一个临时的表中,只有当教务秘书审核过后,才导入到最终的成 绩表中。
数据库应用系统开发 数据库系统开发案例—图书现场采购系统系统主窗体的实现 1.数据表结构的实现 经过前面的需求分析和概念结构设计以后,得到了数据库的逻辑结构。现在就可以在SQL Server 2000数据库系统中实现该逻辑结构。可以直接在SQL Server 2000企业管理器中创建表,也可以在SQL查询分析器中创建。下面给出在查询分析器中创建这些表的SQL语句,读者可以将这些表创建在系统的pubs数据库中。 (1)创建书商图书基本信息表bookseller_bookinfo CREATE TABLE bookseller_bookinfo( rec_id Bigint identity(1,1) PRIMARY KEY, isbn varchar(20) null, bookname varchar(200) null, author varchar(50) null, publisher_date varchar(50) null, publisher varchar(50) null, class_name varchar(50) null, book_price numeric DEFAULT 0, book_num int DEFAULT 0, provider varchar(50) null ) (2)创建图书馆图书馆藏基本信息表library_bookinfo CREATE TABLE library_bookinfo ( rec_id Bigint identity(1,1) PRIMARY KEY, isbn varchar(20) null, bookname varchar(200) null, author varchar(50) null, publisher_date varchar(50) null, publisher varchar(50) null, class_name varchar(50) null, book_price numeric DEFAULT 0, book_num int DEFAULT 0, provider varchar(50) null ) (3)创建用户注册表user_info CREATE TABLE user_info ( user_ID varchar(10) PRIMARY KEY , user_PWD varchar(10) null )
实验四使用SQL语句创建和删除数据库、表 一. 实验目的: 1、了解SQL Server 2005数据库的逻辑结构和物理结构。 2、掌握使用SQL 语句创建和删除数据库。 3、学会使用T-SQL语句创建表。 二. 实验准备 1.明确能够创建数据库的用户必须是系统管理员,或是被授权使用CREATE DATABASE语句的用户。 2.了解用SQL语句创建和删除数据库的基本语法。 3.是用查询分析器,完成用SQL语句创建和删除基本表。 三. 实验要求 1、熟练使用查询分析器进行数据库的创建和删除操作。 2、用查询分析器,完成用SQL语句创建和删除基本表。 3、完成实验报告。 四. 实验内容 一、数据库 1.以下是创建数据库userdb1的SQL语句, create database userdb1 on (name=userdb4_data,--数据文件的逻辑名称,注意不能与日志逻辑同名 filename='g:\xygl\userdb4.mdf' ,--物理名称,注意路径必须存在 size=5,--数据初始长度为5M maxsize=10,--最大长度为10M filegrowth=1)--数据文件每次增长1M log on ( name=userdb4_log, filename='g:\xygl\userdb4.ldf ' , size=2 , maxsize=5 , filegrowth=1) 运行上诉语句建立数据库userdb1
句,并建立“学生信息”数据库.(.mdf的名字可以修改) 3.数据库的修改(alter database 数据库名add file),将一个大小为10MB 的数据文件mrkj添加到userdb1的数据库中,该数据文件的大小为10MB,最大的文件大小为100MB,增长速度为2MB,物理地址与原有的mdf,ldf文件放在一起。 alter database 数据库名 add file() 注括号内格式同下: ( name=userdb4_log, filename='g:\xygl\userdb4.ldf ' , size=2 , maxsize=5 ,
按照如下方式重新定义四张表: 定义新的books表,其所拥有的属性与属性类型与原有的books表一致 以列级完整性的方式定义属性bookId为主码,同时在定义的时候必须提供约束名 定义属性category为”非空” ,同时在定义的时候必须提供约束名 create table Books( bookId number(9,0) constraint BooksKey primary key, title varchar(80), author varchar(40), year integer, category varchar(15) constraint B1 not null ); commit; 定义新的customers表,其所拥有的属性与属性类型与原有的customers表一致 以表级完整性的方式定义属性cid为主码 以列级完整性的方式定义属性cname为”唯一”,同时在定义的时候必须提供约束名 create table Customers ( cid number(9,0), cname char(40) constraint C1 unique, age integer, primary key(cid) ); commit; 定义新的purchases表,其所拥有的属性与属性类型与原有的purchases表一致 定义属性cid与bookId为主码,同时在定义的时候必须提供约束名 以列级完整性的方式定义属性bookId为外码,它参照Books表的主码,同时在定义的时候必须提供约束名。当删除Books表中的某一本书时,级联删 除与它相关的购买记录 以表级完整性的方式定义属性cid为外码,它参照customers表,同时在定义的时候必须提供约束名。当删除customers表中的某个顾客时,如果存在 与该客户相关的购买记录,拒绝删除。 create table Purchases( cid number(9,0), bookId number(9,0)
实验一 1-1.查询员工的姓名、职务和薪水 select employeeName,headShip,salary from employee 图1-1 2.查询名字中含有“有限”的客户姓名和所在地 select CustomerName,address from Customer where CustomerName like '%有限%'
3. 查询出姓“张”并且姓名的最后一个字为“梅”的员工。 select * from employee where employeeName like '张%梅' 图1-3 4. 查询住址中含有上海或南昌的女员工,并显示其姓名、所属部门、职称、住址,其中性别用“男”和“女”显示 SELECT employeeName,department,address, isnull (convert(char(10),birthday,120),'不详')出生日期, case sex when 'M'then '男' when 'F'then'女' end as 性别 from employee where (address like '%上海%'or address like '%南昌%')and sex='F'
5. 查询出职务为“职员”或职务为“科长”的女员工的信息 select * from employee where (headship='职员' or headship='科长') and sex='F' 图1-5 6. 选取编号不在“C20050001”和“C20050004”的客户编号、客户名称、客户地址。 Select * from Customer where CustomerNo not in ( 'C20050001' ,'C20050004')
数据库设计实例 数据库设计是数据库应用系统设计的一个组成部分,其核心是针对于特定的应用环境,设计合理的数据模型,创建数据库及其应用系统,使之能够有效地存储和处理数据,以满足用户的应用需求。从实用角度出发,数据库设计可分为如下几个步骤: 第一步:创建概念数据模型 ◆确定实体和关系 ◆确定属性 ◆规化数据 第二步:生成物理数据模型 第三步:验证设计 为便于学习者理解和掌握,下面结合具体的实例来讲解和展示数据库设计的详细过程。假定我们要开发一个小型的ERP系统,以管理公司部资源,其应用业务场景描述如下: v512工作室由IT业界专业人士组成,在提供高端IT培训业务的同时,还自主制作并免费发布大量公益性学习资源,工作室以公司形式运营,目前共拥有18名员工,这些员工分属于4个部门,且员工之间存在上下级管理关系。计划将来根据业务的发展设立更多的部门,聘用更多的员工。为保证质量,工作室对其成员的各项专业技能进行了级别评定。 8.5.1 确定实体和关系 1. 确定高级别的活动 要确定本ERP系统数据库设计中的实体和实体间关系,首先应明确要基于该数据库执行的高级别活动,这里所谓的高级别活动是指从用户的视角出发,确定本数据库设计中系统所涉及到的业务活动。比如,存储和维护员工的个人信息等。 在前述的应用业务场景中,v512工作室需要考虑的高级别活动包括: -聘用新员工 -解雇现有员工 -维护员工的个人信息 -增设新部门 -裁撤现有部门 -维护部门信息 -维护工作室业务相关的技能信息 -维护各员工的业务技能掌握情况 2. 确定实体 接下来要确定的是,针对上述的高级别活动需要记录和维护有关哪些事物的信息,这些事物将被转换为实体。其中,员工相关信息可抽象为“Employee”实体、部门相关信息可抽象为“Department”实体、技能相关信息抽象为“Skill”实体,为规和方便起见,这些实体均采用英文命名,并尽量在名称中体现其含义。 3. 确定关系 进一步对上述高级活动进行分析,以确定实体间存在何种关系。具体包括: -Employee-Department实体之间存在隶属关系 员工必须且只能隶属于某一个特定的部门,一个部门可以包含0~多名员工,此为一对多关系。 这种从两个方向上对同一个关系的细化描述被称为关系的角色,每个关系都对应两种角色。
实验四SQL练习2 一、实验目的 1.掌握索引的建立、删除及使用; 2.掌握单表查询、连接查询、嵌套查询和集合查询; 3.掌握插入数据、修改数据和删除数据语句的非常用形式。二、实验学时 2学时 三、实验内容 1.利用Query Analyzer完成以下操作: ⑴在预算日期、结算日期和入账日期上分别建立索引,并在查询操作中体会索引的作用。 ⑵在完成第2题的查询操作后,删除预算日期、结算日期和入账日期上的索引。 2.利用Query Analyzer完成以下操作: ⑴采油一矿二队2016-5-1到2016-5-28有哪些项目完成了预算,列出相应明细。 ⑵采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应明细。 ⑶采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应的材料费消耗明细。 ⑷采油一矿二队2016-5-1到2016-5-28有哪些项目完成了入账,列出相应明细。
⑸列出采油一矿二队2016-5-1到2016-5-28总的预算金额。 ⑹列出采油一矿二队2016-5-1到2016-5-28总的结算金额。 ⑺列出采油一矿二队2016-5-1到2016-5-28总的入账金额。 ⑻列出采油一矿2016-5-1到2016-5-28总的入账金额。 ⑼有哪些人员参与了入账操作。 ⑽列出2016-5-1到2016-5-28进行了结算但未入账的项目。 ⑾列出采油一矿二队的所有项目,按入账金额从高到低排列。 ⑿列出有哪些施工单位实施了项目,并计算各单位所有项目结算金额总和。 ⒀找出消耗了材料三且消耗超过了2000元的项目,列出相应消耗明细(利用子查询)。 ⒁作业公司二队参与了哪些项目。 ⒂作业公司一队和二队参与了哪些项目(利用union)。 ⒃采油一矿的油井是哪些作业队参与施工的。 3.利用Query Analyzer完成以下操作: ⑴建立数据表(包含3个属性列:★施工单位、★年月、◆结算金额)保存各个施工单位每月的结算金额总和。 ⑵用子查询将各个施工单位每月的结算金额总和插入到所建立的数据表中。 ⑶用带子查询的修改语句将采油一矿油井作业项目的结算人改为“李兵”。 ⑷用带子查询的删除语句删除采油一矿油井作业项目。
实验JDBC进阶(2) 一、相关知识点 1、JDBC基本概念 2、视图、索引 二、实验目的: 理解视图和索引的概念,并通过视图设计简化程序设计,通过索引设计优化查询性能 三、实验容: 1、设计读者视图view_reader,并修改readerManager类中相关代码。 第一步:通过查询分析器建立读者视图,要求视图中包含读者类别名称; 第二步:改造ReaderManager类,将其中的连接查询用视图代替。 第三步:运行图书管理系统,进行各个功能的测试(读者类别管理、读者管理)【实验结果与分析】 A、写出视图创建代码。 create view view_reader as select readerid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate,s topUserId,rt.readerTypeName,r.removeDate from BeanReader r,BeanReaderType rt where r.readerTypeId=rt.readerTypeId B、给出改造后ReaderManager类的各个方法的代码。 String sql="select *" + " from view_reader where removeDate is null " + " and removeDate is null "; String sql="select *" + " from view_reader where readerid=?";
2、设计图书视图view_book,并修改BookManager类中相关代码。 第一步:通过查询分析器建立图书视图,要求视图中包含名称; 第二步:改造BookManager类,将其中的连接查询用视图代替。 第三步:运行图书管理系统,进行各个功能的测试 【实验结果与分析】 A、写出视图创建代码。 create view view_book as select b.barcode,b.bookname,b.pubid,b.price,b.state,p.publishername from beanbook b,beanpublisher p where b.pubid=p.pubid B、给出改造后ReaderManager类的各个方法的代码。 public class BookManager { public List
数据库课程设计报告 教学管理系统 数据库设计 课程设计题目教学管理系统学院软件学院 班级软件技术四班年级2013级 姓名彭超李新徐彤(2014 年11月)
用5行左右的文字对系统进行简要介绍 对教学管理信息统一规范整理,实现各种信息的自动管理。为便于信息的查询,找出各种信息的关联性,根据各种需求设计出合理的报表。 减轻教学日常信息管理的负担,方便学生、教师查询信息和学校对所有信息的管理。以简单便捷的操作获取详尽的信息。 一、数据需求分析 某学校设计学生教学管理系统。学生实体包括学号、姓名、性别、生日、民族、籍贯、简历、登记照,每名学生选择一个主修专业,专业包括专业编号、名称和类别,一个专业属于一个学院,一个学院可以有若干个专业。学院信息要存储学院号、学院名、院长。教学管理还要管理课程表和学生成绩。课程表包括课程号、课程名、学分,每门课程由一个学院开设。学生选修的每门课程获得一个成绩。另外,为了管理教师教学安排,教师包括编号、姓名、年龄、职称,一个教师只能属于一个学院,一名教师可以上若干门课程,一门课程可以有多名老师来上,每个教师所上的每门课都有一个课堂号和课时数。 本系统数据字典如下: 数据项表
数据流 数据流表 二、概念结构设计 1.首先确定系统中的实体 从以上数据需求可以看出,系统共包括5个实体:学生、专业、学院、教师、课程。
2.再确定系统中实体间的关系 根据数据需求描述推出:专业与学生是1对多关系;学生与课程是多对多关系;课程与老师是多对多关系;课程与学院是多对1关系;学院与专业是1对多关系;学院与教师是1对多关系。 3.转化成E-R图 图1 实体-属性图 图2 教学管理ER图 三、逻辑结构设计
实验四使用SQL语句创建与删除数据库、表 一、实验目的: 1、了解SQL Server 2005数据库的逻辑结构与物理结构。 2、掌握使用SQL 语句创建与删除数据库。 3、学会使用T-SQL语句创建表。 二、实验准备 1.明确能够创建数据库的用户必须就是系统管理员,或就是被授权使用CREATE DATABASE语句的用户。 2.了解用SQL语句创建与删除数据库的基本语法。 3.就是用查询分析器,完成用SQL语句创建与删除基本表。 三、实验要求 1、熟练使用查询分析器进行数据库的创建与删除操作。 2、用查询分析器,完成用SQL语句创建与删除基本表。 3、完成实验报告。 四、实验内容 一、数据库 1.以下就是创建数据库userdb1的SQL语句, create database userdb1 on (name=userdb4_data,--数据文件的逻辑名称,注意不能与日志逻辑同名 'g:\xygl\userdb4、mdf' ,--物理名称,注意路径必须存在 size=5,--数据初始长度为5M maxsize=10,--最大长度为10M )--数据文件每次增长1M log on ( name=userdb4_log, 'g:\xygl\userdb4、ldf ' , size=2 , maxsize=5 , ) 运行上诉语句建立数据库userdb1
2.根据步骤1的sql语句,写出创建实验二中“学生信息”数据库的sql语句,并建立“学生信息”数据库、(、mdf的名字可以修改) 3、数据库的修改(alter database 数据库名add file),将一个大小为10MB 的数据文件mrkj添加到userdb1的数据库中,该数据文件的大小为10MB,最大的文件大小为100MB,增长速度为2MB,物理地址与原有的mdf,ldf文件放在一起。 alter database 数据库名 add file() 注括号内格式同下: ( name=userdb4_log, 'g:\xygl\userdb4、ldf ' , size=2 , maxsize=5 ,
计算机与信息学院 数据库实验报告 专业班级 学生姓名及学号 课程教学班号 任课教师 实验指导教师 实验地点 2012 ~2013 学年第二学期
实验1 使用向导创建和删除数据库 一、实验目的 1.熟悉SQL Server 中SQL Server Management Studio的环境 2.了解SQL Server 数据库的逻辑结构和物理结构 3.掌握使用向导创建和删除数据库的方法 二、实验要求 1.熟练使用SSMS进行数据库的创建和删除操作。 2.完成实验报告。 三、实验内容 设有一学籍管理系统,其数据库名为“EDUC”。 初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长; 日志文件初始为2MB,最大可增长到5MB,按1MB增长。 数据库的逻辑文件名为“student_data”, 物理文件名为“student_data.mdf,存放路径为“E:\sql_data”。 日志文件的逻辑文件名为“student_log”, 物理文件名为“student_log.ldf”,存放路径为“E:\sql_data”。 四、实验步骤
1.使用SQL Server Management Studio(简称SSMS)创建数据库。 (1)启动SSMS 在开始菜单中:所有程序-SQL Server 2005 -SQL Server Management Studio单击“连接”按钮,便可以进入【SQL Server Management Studio】窗口。如果身份验证选择的是“混合模式”,则要输入sa的密码。 (2)建立数据库 在“对象资源管理器”窗口,建立上述数据库EDUC。在数据库节点上右击选择新建。同时建立一个同样属性的数据库EDUC1。
数据库系统应用与开发实 验四 Revised by BLUE on the afternoon of December 12,2020.
实验 JDBC基础(3) 一、相关知识点 1、JDBC基本概念 2、JDBC数据增、删、改,事务控制等 二、实验目的: 理解Java连接数据库的基本概念。理解利用Statement对象、PreparedStatement对象进行增、删、改操作,理解事务的概念和JDBC编程方式。 三、实验内容: 1、利用Statement对象进行数据添加。 第一步:修改PublisherManager类的createPublisher方法,将其中的insert语言改成用Statement对象执行; 第二步:运行图书管理系统,进行添加出版社测试。 【实验结果与分析】 A、写出替换的代码部分。 Connection conn=null; try { conn=(); String sql="select * from BeanPublisher where pubid='"+()+"'"; (); quals()) || ().length()>20){ throw new BusinessException("读者类别名称必须是1-20个字"); } if()<0 || ()>100){ throw new BusinessException("借阅图书数量必须在0-100之间"); } Connection conn=null; try { conn=(); String sql="select * from BeanReaderType where readerTypeName="; (1, ()); if()) throw new BusinessException("读者类别名称已经被占用"); (); (); sql="select max(readerTypeId)from BeanReadertype"; int i=1; pst=(sql); rs = (); odifyUserName("超级管理员"); } catch (BaseException e) { odifyUserName("超级管理员1"); } catch (BaseException e) { quals()) || ().length()>20){
VFP基本数据库系统开发实例(附图) 西南大学计信院 导学 在Visual Foxpro中开发一个应用系统应该包括需求分析、项目创建、模块设计、运行调试、保存发布到建立帮助等,下面介绍如何把各个模块集成起来,并创建一个应用程序。 11.1 系统需求分析 传统的学生成绩管理方法不仅浪效率低,而且由于管理不规范容易导致各种错误的发生。因此实现一个智能化、系统化的公共计算机成绩管理系统是十分必要和不可缺少的。它将大大减轻管理者的劳动强度,降低出错率,提高管理的效率。该系统可以实现如下功能: 1. 数据需求 通过调查,总结出该应用程序对数据的需求大致有如下这些: (1) 学生信息 包括学号,姓名,性别,出生日期,系科,备注,照片 (2) 管理员信息 包括用户名,密码,管理员姓名,权限,说明信息 (3) 学生成绩信息 主要包括学号, 课程编号,平时成绩,笔试成绩,上机成绩,总评成绩,审核否 (4) 课程信息 包括课程编号,课程名称 2. 功能需求 功能分析的任务是了解用户对数据的处理方法和输出格式。 (1) 基本数据录入 基本数据包括学生信息、管理员信息、学生成绩休息和课程信息等。要求系统能够录入这些数据,并且可以进行修改。在数据录入和修改过程中应保持数据的参照完整性。 (2) 查询 能够查询出学生成绩,和补考人员名单等。 (3) 学生和管理员信息的维护 要求能够根据需要对学生和管理员信息进行维护修改等。 (4)成绩的审核 根据学生的总评成绩审核学生的计算机成绩是否通过。 (5) 打印输出 打印学生成绩表和补考人员名单等。 11.2 系统设计 1. 程序总体结构设计 在开始程序设计之前,首先应该将程序的总体结构以层次图的形式表示出来,便于对程序分
南京晓庄学院 《数据库原理与应用》课程实验报告 实验四查询设计实验 所在院(系):数学与信息技术学院 班级: 学号: 姓名:
1.实验目的 (1)了解查询的目的,掌握SELECT语句的基本语法和查询条件的表示方法。 (2)掌握数据排序和数据联接查询的方法。 (3)掌握SQL Server查询分析器的使用方法。 2.实验要求 (1)针对“TM”数据库,在SQL Server查询分析器中,用T-SQL语句实现以下单表查询 操作,并将将调试成功的T-SQL命令,填入实验报告中。 a)查询所有课程的详细情况。 b)查询来自江苏或山东的学生学号和姓名,并以中文名称显示输出的列名。 c)查询选修了课程的学生学号(一人选了多门课程的话,学号只显示一次)。 d)查询选修课程号为07253001的学号和成绩,并要求对查询结果按成绩降 序排列,如果成绩相同则按学号升序排列。 e)查询所有学生的学号、姓名和年龄。 f)查询选修课程号为07253001的成绩在85-95之间的学生学号和成绩,并 将成绩乘以0.7输出。 g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院 (DEPT_ID为09)姓张的学生的信息。。 h)查询所有核心课程(课程名中带*的)的情况。 i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。 (2)在SQL Server查询分析器中,用T-SQL语句实现下列数据联接查询操作: a)查询每个学生的情况以及他(她)所选修的课程。 b)查询学生的学号、姓名、选修的课程名及成绩。 c)查询选修C语言程序设计且成绩为85分以上的学生学号、姓名及成绩。 d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。 e)分别用等值联接和内联接查询有授课记录的老师的姓名。 f)用外联接查询所有老师的授课情况,输出老师的工号、姓名、职称、院 系、担任的课程号和授课的学期,结果按院系和职称升序排列。如果该 老师没有授课历史,在课程号和授课的学期中显示空值 (3)在SQL Server Management Studio中新建查询,完成以上查询命令的同时,熟悉SQL编 辑器工具栏中各快捷按钮的作用。 (4)按要求完成实验报告。
长春大学计算机学院科学与技术专业 数据库原理实验报告
3.针对学生_课程数据库中的三个表,做如下操作: (1)为student 表增加一个属性:TELE ,数据类型为varchar ,并输入数据; (2)为student 表以sdept 建立一个名为sdeptin 的索引; (3)为course 表以cname 建立一个名为cnamein 的索引; (4)为student 表以sage 建立一个聚簇索引。 4.用CREATE TABLE 建立教材p71习题第6题中SPJ 数据库中的4个表,并输入表中数据。写出CREATE TABLE 语句,并在定义表时说明主码。 5.建立商品销售数据库SPXS ,并SPXS 数据库中用CREAT TABLE 语句建立如下三个表: 商店S : sno sname city S1 百盛 北京 S2 沃尔玛 深圳 S3 华联 长春 S4 国商 长春 S5 百货大楼 北京 三、实验结果与分析: 1. 将学生-课程数据库中的各表的表结构粘贴在下面(要求粘贴SQL Server Managemet Studio 整个窗口) student: course: 商品P : Pno pname color price P1 电视 黑 5000 P2 冰箱 灰 3000 P3 洗衣机 白 3500 P4 电饭煲 白 1500 P5 电磁炉 黑 500 销售SP: pno sno qty p1 S1 100 P3 S1 200 P1 S2 50 P2 S2 30 P2 S3 60 P1 S4 150 P2 S4 120 P4 S5 90 P5 S5 60
--1,创建登陆用户temp1,密码是1234,加入到school数据库中并赋予db_owner数据库角色. Sp_addlogin'temp1','1234','School'; ---添加用户 use School go exec sp_grantdbaccess'temp1'; --- /* CREATE LOGIN tmp1 WITH PASSWORD = '123',default_database=School; -- Creates a database user for the login created above. CREATE USER user1 FOR LOGIN tmp1; */ --查看登录账号的信息 Select*from sys.syslogins where name='temp1'; /* use School go exec sp_addsrvrolemember 'temp1','sysadmin';--添加服务器角色 */ --赋予db_owner数据库角色. use School go exec sp_addrolemember'db_owner','temp1'; --2,创建登陆用户temp2,密码是1234, --加入到school数据库中,并赋予该用户对student表select,insert权限 Sp_addlogin'temp2','1234','School'; ---添加用户 use School go exec sp_grantdbaccess'temp2';
grantselect,insert on student to temp2; --3,对数据库school进行完全数据库备份,写出备份语句 Use School Go Sp_addumpdevice'disk','schoolinfo','e:\data\schoolinfo.bak' Go Backupdatabase school to schoolinfo withinit; --4,将student学生信息表中所有学生信息年龄改为20,进行差异化备份--修改表的数据 use school go update student set sage=20; ---执行差异化的备份 Use School Go Backupdatabase School todisk='e:\data\schoolinfo.bak'; Use school Go Backupdatabase School to schoolinfo withdifferential,init Use school Go select*from student Backupdatabase school to schooldemo withdifferential,init
xxxx大学《数据库管理系统》课程实验报告 班级: _______姓名:实验时间:年月日指导教师:_______ 一、实验目的 1、通过实验,使学生全面了解最新数据库管理系统的基本内容、基本原理。 2、牢固掌握SQL SERVER的功能操作和Transact-SQL语言。 3、紧密联系实际,学会分析,解决实际问题。学生通过小组项目设计,能够运用最新数据库管理系统于管理信息系统、企业资源计划、供应链管理系统、客户关系管理系统、电子商务系统、决策支持系统、智能信息系统中等。 二、实验内容 1.导入实验用示例数据库: f:\教学库.mdf f:\教学库_log.ldf f:\仓库库存.mdf f:\仓库库存_log.ldf 1.1 将数据库导入 在SqlServer 2005 导入已有的数据库(*.mdf)文件,在SQL Server Management Studio 里连接上数据库后,选择新建查询,然后执行语句 EXEC sp_attach_db @dbname = '教学库', @filename1 = 'f:\教学库.mdf', @filename2 = 'f:\教学库_log.ldf' go use [教学库] EXEC sp_changedbowner 'sa' go EXEC sp_attach_db @dbname = '仓库库存', @filename1 = 'f:\仓库库存.mdf',
@filename2 = 'f:\仓库库存_log.ldf' go use [仓库库存] EXEC sp_changedbowner 'sa' go 1.2 可能出现问题 附加数据库出现“无法打开物理文件"X.mdf"。操作系统错误5:"5(拒绝访问。)"。(Microsoft SQL Server,错误: 5120)”。 解决:找到要附加的.mdf文件-->右键-->属性-->安全-->选择当前用户-->编辑-->完全控制。对.log文件进行相同的处理。 2.删除创建的数据库,使用T-SQL语句再次创建该数据库,主文件和日志文件的文件名同上,要求:仓库库存_data最大尺寸为无限大,增长速度为20%,日志文件初始大小为2MB,最大尺寸为5MB,增长速度为1MB。 CREATE DATABASE仓库库存 (NAME = '仓库库存_data', FILENAME = 'F:\仓库库存_data.MDF' , SIZE = 10MB, FILEGROWTH = 20%) LOG ON (NAME ='仓库库存_log', FILENAME = 'F:\仓库库存_log. LDF', SIZE = 2MB, MAXSIZE = 5MB, FILEGROWTH = 1MB) 2.1 在数据库“仓库库存”中完成下列操作。 (1)创建“商品”表,表结构如表1: (2)创建“仓库”表,表结构如表2: 表2 仓库表