2011数据库原理实验教案

更新时间:2024-03-02 23:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据库原理与应用

实验

教 案

2010年9月

1

数据库原理与应用实验教学

数据库技术是计算机科学中发展最快的领域之一,也是应用最

广的技术之一,它已成为计算机信息系统与应用系统的核心技术和础。本课程是计算机专业的必修课程。通过本课程的学习,使学生理解数据库系统的基本原理:包括数据库的一些基本概念,各种数据模型的特点,关系数据库基本概念,SQL语言,关系数据理论,数据库的设计理论。掌握数据库应用系统的设计方法、了解数据库技术的发展动向,以指导今后的应用。

实践方面:要求学生利用数据库的原理知识和实用工具动手开发数据库应用系统。其最终目的是培养学生运用数据库技术解决问题的能力,激发他们在此领域中继续学习和研究的愿望。 为了达到这个目的,除了对关系数据库系统的基本概念、原理和方法进行介绍之外,本课程的另外一个特点是强调课程的实践性。

实验的目的是为了配合课堂教学,进一步强化对数据库原理的理解。

2

实验一 安装SQL Server 2000

一、实验目的

SQL Server 2000是Mircosoft公司推出的关系型网络数据库管理系统,是一个逐步成长起来的大型数据库管理系统。

本次实验了解SQL Server 2000的安装过程,熟悉SQL Server 2000软件环境。学会安装SQL Server 2000的安装。 二、实验内容

1.安装Microsoft的数据库服务软件SQL Server 2000:

运行服务器目录SQL2000下的可执行文件autorun.exe,进行SQL Server 2000的安装。安装主界面如图1-1所示。

图1-1

选择安装SQL Server 2000组件,出现组件安装界面,如图1-2所示。

3

图1-2

选择安装数据库服务器,进入SQL Server 2000的安装向导,如图1-3所示。

图1-3

4

点击“下一步”,到计算机名称对话框,如图1-4所示。

图1-4

“本地计算机”是默认选项,本地计算机的名称就显示在上面,点击“下一步”,出现安装选择对话框,如图1-5所示。

图1-5

选择“创建新的SQL Server实例,或安装客户端工具”,点击“下一步”,出现用户信息对话框,如图1-6所示。

5

图1-6

输入姓名和公司名称后,点击“下一步”,出现软件许可协议,如图1-7所示。

图1-7

点“是”按钮,出现安装定义对话框,如图1-8所示。

6

图1-8

选择“服务器和客户端工具”,点击下一步,出现实例名对话框,如图1-9所示。

图1-9

系统提供了“默认”复选框,点击下一步,出现安装类型选择框,如图1-10所示。

7

图1-10

选择典型,点击“下一步”,出现服务帐户对话框,如图1-11所示。

图1-11

接受系统的缺省值,点击“下一步”,出现身份验证模式窗口,如图1-12所示。

8

图1-12

接受系统的缺省值,点击“下一步”,出现开始拷贝文件窗口,如图1-13所示。

图1-13

点击“下一步”,开始将文件拷贝到选择的目录中,如图1-14所示。

9

图1-14

文件拷贝完成后,出现安装结束界面,如图1-15所示。

图1-15

点击“完成”按钮,完成SQL Server 2000的安装。 三、实验任务

1.在计算机上安装数据库软件SQL Server 2000;

2.熟悉软件的使用,SQL Server 2000主菜单如图1-16所示:

图1-16

10

实验二 启动SQL Server2000和在企业管理器下建库和表

一、实验目的

SQL Server 2000的启动和管理工作由服务管理器和企业管理器来实现。 本次实验了解SQL Server 2000的启动,熟悉如何在SQL Server 2000图形环境下建立数据库和表。学会安装SQL Server 2000的启动和建库、表的操作。 二、实验内容

1.启动数据库服务软件SQL Server 2000:

在程序菜单中选择Microsoft SQL Server,如图2-1所示:

图2-1

再选中服务管理器,如图2-2所示:

11

图2-2

点击服务管理器后,出现SQL Server服务管理器,如图2-3所示:

图2-3

点击“开始/继续”按钮,启动SQL Server 2000数据库服务。

启动成功后,在时钟旁边出现一个符号,如图2-4所示。

图2-4

2.在SQL Server 2000中建立数据库:

在程序菜单中选择Microsoft SQL Server,如图2-5所示:

12

图2-5

再选中企业管理器,如图2-6所示:

图2-6

点击企业管理器后,出现企业管理器的主界面,如图2-7所示:

13

图2-7

点击左边树状控制栏的+/-号可以打开和关闭SQL Server组中的本地服务项目,在选中数据库服务项目后,单击鼠标右键,出现数据库的菜单,如图2-8所示:

图2-8

点击新建数据库,出现新建数据库窗口,如图2-9所示:

14

图2-9

输入数据库名称:Test,点击数据文件选项卡,如图2-10所示:

图2-10

15

实验三 SQL Server2000查询分析器的使用

一、实验目的

SQL Server 2000的查询分析器是一种特别用于交互式执行SQL语句和脚本的极好的工具。

本次实验了解SQL Server 2000查询分析器的启动,熟悉如何在SQL Server 2000查询分析器中建表、插入记录、查询记录。学会SQL Server 2000的查询分析器中建表、插入记录、查询记录。 二、实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器: 在程序菜单中选择Microsoft SQL Server,如图3-1所示:

图3-1

再选中查询分析器,如图3-2所示:

21

图3-2

点击查询分析器后,出现连接到SQL Server窗口,如图3-3所示:

图3-3

点击按钮,出现选择服务器窗口,如图3-4所示。

22

图3-4

选择本地服务(Local),点击确定按钮。

再点击连接到SQL Server窗口的确定按钮。出现SQL查询分析器主界面,如图3-5所示。

图3-5

23

选择查询菜单,点击更改数据库,如图3-6所示。

图3-6

出现选择数据库窗口,如图3-7所示。

图3-7

选择在上次实验中建立的数据库Test,点确定按钮。 2.在查询分析器中建立表:

在查询分析器的查询窗口中输入SQL语句,如图3-8所示。

24

图3-8

点击按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图3-9所示。

图3-9

提示命令成功完成,或者报告出错信息。 3.查询分析器中向表添加数据:

在查询分析器的查询窗口中输入SQL语句,如图3-10所示。

25

图3-10

点击按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图3-11所示。

图3-11

1.从表中查询数据:

在查询分析器的查询窗口中输入SQL语句,如图3-12所示。

26

图3-12

点击按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图3-13所示。

图3-13

三、实验任务

1.打开数据库SQL Server 2000的查询分析器,用SQL语言建表student,表结构如下图所示: 字段名 id name sex age score 类型 varchar varchar varchar integer numeric 长度 17 10 2 6,2 含义 学生编号 姓名 性别 年龄 总成绩 2.用SQL语言向表student插入如下6条记录: A0001 赵一 B0002 钱二 C0003 孙三 D0004 李四 E0005 周五 男 女 男 男 女 20 580.00 19 540.00 21 555.50 22 480.00 20 495.50 27

F0006 吴六 男 19 435.00 3.练习查询语句,查找年龄大于等于20岁,成绩低于500分的记录。

实验四 SQL单表查询语句实验

实验目的与要求:

目的是熟练掌握开发环境 的功能和使用方法,掌握在开发环境下SQL语言中数据操纵的语句,掌握程序下对表中数据的操作。

实验内容:(说明:需写实验报告(1))

select语句中各种查询条件的实验并写出查询结果。

[例1] 查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student;

[例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept

FROM Student;

[例3] 查询全体学生的详细记录。

SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;或 SELECT *

FROM Student;

[例4] 查全体学生的姓名及其出生年份。 SELECT Sname,2000-Sage FROM Student;

[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。 SELECT Sname,'Year of Birth: ',2000-Sage,ISLOWER(Sdept) FROM Student;

实验五 SQL连接查询语句实验查询

一、.实验目的与要求:

标准SQL连接查询、嵌套查询,规则、形式较多,需要学生多记,多练,在练习中加强理解、记忆。

二、.实验内容:(说明:需写实验报告(2))

SQL连接查询、嵌套查询并写出查询结果。 SQL中连接查询的主要类型 广义笛卡尔积、 等值连接(含自然连接)、非等值连接查询、自身连接查询、外连接查询、复合条件连接查询

28

1、广义笛卡尔积

不带连接谓词的连接很少使用

例: SELECT Student.* , SC.* FROM Student, SC

2、等值与非等值连接查询

等值连接、自然连接、非等值连接

[例1] 查询每个学生及其选修课程的情况。 SELECT Student.*,SC.* FROM Student,SC

WHERE Student.Sno = SC.Sno;

自然连接

等值连接的一种特殊情况,把目标列中重复的属性列去掉。 [例2] 对[例32]用自然连接完成。

SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student,SC

WHERE Student.Sno = SC.Sno;

3、自身连接

一个表与其自己进行连接,称为表的自身连接 需要给表起别名以示区别

由于所有属性名都是同名属性,因此必须使用别名前缀 [例3] 查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.Cno,SECOND.Cpno

FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno;

4、外连接(Outer Join)

[例 4] 查询每个学生及其选修课程的情况包括没有选修课程的学生----用外连接操作 SELECT Student.Sno,Sname,Ssex, Sage,Sdept,Cno,Grade FROM Student,SC

WHERE Student.Sno = SC.Sno(*);

在表名后面加外连接操作符(*)或(+)指定非主体表,非主体表有一“万能”的虚行,该行全部由空值组成,虚行可以和主体表中所有不满足连接条件的元组进行连接,由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值 左外连接:外连接符出现在连接条件的左边 右外连接:外连接符出现在连接条件的右边 5、复合条件连接

WHERE子句中含多个连接条件时,称为复合条件连接

[例6] 查询每个学生的学号、姓名、选修的课程名及成绩。 SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno = SC.Sno

29

and SC.Cno = Course.Cno;

嵌套查询 嵌套查询概述

一个SELECT-FROM-WHERE语句称为一个查询块

将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询

SELECT Sname 外层查询/父查询 FROM Student WHERE Sno IN

(SELECT Sno 内层查询/子查询 FROM SC

WHERE Cno= ' 2 ');

实验六 SQL数据更新语句实验

一、实验目的与要求:

目的是熟练掌握开发环境 的功能和使用方法,掌握在开发环境下SQL语言中数据操纵的语句,掌握程序下对表中数据的操作。

二、实验内容:(说明:需写实验报告(3)) update、delete、insert 语句的练习并写出结果。

数据更新描述:

数据更新包括三种操作:1. 插入数据 2. 修改数据 3. 删除数据

1 . 插入数据

两种插入数据方式:插入单个元组;插入子查询结果

1). 插入单个元组

语句格式 INSERT

INTO <表名> [(<属性列1>[,<属性列2 >?])]

VALUES (<常量1> [,<常量2>] ? ) 功能

将新元组插入指定表中。 [例1] 将一个新学生记录

(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。 INSERT

INTO Student

VALUES ('95020','陈冬','男','IS',18); [例2] 插入一条选课记录( '95020','1 ')。 INSERT

30

INTO SC(Sno,Cno)

VALUES (' 95020 ',' 1 '); 新插入的记录在Grade列上取空值

2). 插入子查询结果

[例3] 对每一个系,求学生的平均年龄,并把结果存入数据库。 第一步:建表

CREATE TABLE Deptage

(Sdept CHAR(15) /* 系名*/ Avgage SMALLINT); /*学生平均年龄*/ 第二步:插入数据 INSERT

INTO Deptage(Sdept,Avgage) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;

2. 修改数据

1. 修改某一个元组的值

[例4] 将学生95001的年龄改为22岁。 UPDATE Student SET Sage=22

WHERE Sno=' 95001 '; 2. 修改多个元组的值

[例5] 将所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1;

3. 删除数据

1. 删除某一个元组的值

[例8] 删除学号为95019的学生记录。 DELETE

FROM Student

WHERE Sno='95019'; 2. 删除多个元组的值

[例9] 删除2号课程的所有选课记录。 DELETE FROM SC;

WHERE Cno='2'; 3. 带子查询的删除语句

[例11] 删除计算机科学系所有学生的选课记录。 DELETE FROM SC

WHERE 'CS'=

31

(SELETE Sdept FROM Student

WHERE Student.Sno=SC.Sno);

实验七 数据库的安全性和数据库完整性 一、实验目的与要求:

熟练掌握数据库的安全性和数据库完整性的功能和使用方法,掌握在开发环境下SQL语言中数据库的安全性和数据库完整性的语句操作。

二、实验内容:(说明:需写实验报告(4))

1.数据库的安全性

(1). 数据库的授权(GRANT) GRANT语句的一般格式: GRANT <权限>[,<权限>]...

[ON <对象类型> <对象名>] TO <用户>[,<用户>]... [WITH GRANT OPTION];

GRANT功能:将对指定操作对象的指定操作权限授予指定的用户。

例1 把查询Student表权限授给用户U1 GRANT SELECT

ON TABLE Student TO U1;

例2 把对Student表和Course表的全部权限授予用户U2和U3 GRANT ALL PRIVILIGES ON TABLE Student, Course TO U2, U3;

例3 把对表SC的查询权限授予所有用户 GRANT SELECT ON TABLE SC TO PUBLIC;

例4 把查询Student表和修改学生学号的权限授给用户U4 GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;

例5 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 GRANT INSERT ON TABLE SC

32

TO U5

WITH GRANT OPTION;

执行例5后,U5不仅拥有了对表SC的INSERT权限, 还可以传播此权限:

例6 GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;

同样,U6还可以将此权限授予U7:

例7 GRANT INSERT ON TABLE SC TO U7; 但U7不能再传播此权限。 U5--> U6--> U7

(2).收回权限(REVOKE)

REVOKE语句的一般格式为:

REVOKE <权限>[,<权限>]... [ON <对象类型> <对象名>] FROM <用户>[,<用户>]...;

功能:从指定用户那里收回对指定对象的指定权限 例9 收回所有用户对表SC的查询权限 REVOKE SELECT ON TABLE SC FROM PUBLIC;

例10 把用户U5对SC表的INSERT权限收回 REVOKE INSERT ON TABLE SC FROM U5;

2. 数据库完整性

什么是数据库的完整性 数据的正确性和相容性

防止不合语义的数据进入数据库。

例: 学生的年龄必须是整数,取值范围为14--29; 学生的性别只能是男或女; 学生的学号一定是唯一的;

学生所在的系必须是学校开设的系; 完整性:是否真实地反映现实世界

数据库的完整性分为实体完整性、 参照完整性、用户定义的完整性。 例11.将student表中在Sno属性定定义为码。 CREATE TABLE student ( Sno char(16) PRIMARY KEY, Sname char(10) NOT NULL, Ssex char(2), Sage SMALLINT, Sdept char(20) );

33

例11.定义SC中的参照完整性。 CREATE TABLE SC ( Sno char(16) NOT NULL, Cno char(4) NOT NULL, Grade SMALLINT,

PRIMARY KEY(Sno,Cno),

FOREIGN KEY (Sno) REFERENCES student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );

实验八 嵌入式SQL访问数据库

1、实验内容:(说明:需写实验报告(5))

编写嵌入式C程序,编程实现了对“学生课程数据库”的访问和操作:对Student表中年龄进行更新。系统每输出一个学生记录,询问用户是否更新。如果要更新,就输入新的年龄。

2.嵌入式SQL要求

要求:将一段连续的SQL操作写成嵌入到C程序中的程序,调试程序,使得程序能完成一项复杂的数据处理功能,并提交程序。

嵌入式SQL由SQL语句和C/C++代码组成。其中SQL语句由预处理器翻译成C或C++的源代码。对预处理后的源代码进行编译、链接生成可执行程序后方可运行。

3、嵌入式SQL访问数据库程序清单

#include #include

EXEC SQL BEGIN DECLARE SECTION; char deptname[20]; char HSno[9]; char HSname[20]; char HSsex[4]; int HSage; int NEWAGE;

EXEC SQL END DECLARE SECTION;

34

long SQLCODE;

EXEC SQL INCLUDE sqlca;

int main() {

int count=0; char yn;

printf(\请输入您要更新的系名(Sdept):\ scanf(\

EXEC SQL CONNECT TO 服务器名.数据库名 USER 登录名.密码; //注意此处的格式 EXEC SQL DECLARE SX CURSOR FOR

SELECT Sno,Sname,Ssex,Sage FROM Student

WHERE SDept=:deptname;

EXEC SQL OPEN SX; for(;;) {

EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; if(sqlca->sqlcode==0)

break;

if(count++==0) { }

printf(\ printf(\是否修改年龄?(y/n)\ do {

scanf(\

35

printf(\

}

}

}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y'); if(yn=='y'||yn=='Y') { } else {

printf(\是否退出程序?(Y/N)\ do {

scanf(\ printf(\输入新的年龄:\ scanf(\ EXEC SQL UPDATE Student

SET Sage=:NEWAGE WHERE CURRENT OF SX;

}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y'); if(yn=='y'||yn=='Y') {

break; } }

EXEC SQL CLOSE SX; EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT ALL;

4. 实验注意事项

二次编译顾名思义就是经过了两次编译,编译的源代码文件一般是用两种编程语言写成的。

36

嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C/C++、Java,称为宿主语言,简称主语言。

对ESQL一般采用预编译的方法处理,通过预处理程序对源程序进行扫描,识别出ESQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它们,然后由主语言的编译程序将纯的主语言程序编译成目标代码。

C语言编译程序不能识别应用程序中的SQL语句,需要经过预处理程序将其转换成C语句。这里我们采用SQL server 2000的预处理程序nsqlprep.exe

要让ESQL编程第一次在VC+6.0和SQL server 2000 环境中编译运行,需要通过以下几个步骤:

1.初始化编译环境

虽然SQL server 2000 为嵌入式SQL提供预编译接口,但是默认安装方式没有安装。因此,我们要进行手工添加。

将SQL安装光盘内的DEVTOOLS文件夹复制到SQL的安装目录下(!!默认下为C:\\Program Files\\Microsoft SQL Server\\),执行.\\DEVTOOLS\\SAMPLES\\ESQLC\\目录中的UNZIP_ESQLC.EXE文件(!!点击finish,默认解压到当前目录下!!),解压预编译必要的头文件和库文件,然后运行解压出来的批处理文件setenv.bat初始化SQL预编译环境(这项操作实际上设置两个环境变量)。 接下来添加

SQL预编译接口,将安装光盘中

X86\\BINN中的

nsqlprep.exe,sqlaiw32.all,sqlakw.32.dll复制到SQL安装目录(!!默认下为C:\\Program Files\\Microsoft SQL Server\\)中的\\MSSQL\\Binn\\目录下,并将C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Binn添加到环境变量中。

SQL设置完了,现在开始设置VC编译环境。进入VC安装目录(默认为C:\\Program Files\\Microsoft Visual Studio\\),运行VC98\\Bin目录中的批处理文件VCVARS32.BAT。 运行VC,添加二次编译ESQL程序的头文件和库文件:

(1).工具->选项->目录->在Include files中添加 SQL安装目录\\devtools\\include\\

(

:

C:\\Program

Files\\Microsoft

SQL

Server\\devtools\\include)将SQL server自带的用于数据库开发的头文件包含到工程环境中。

(2).工具->选项->目录->在Lib files中添加 SQL安装目录\\devtools\\x861ib\\(默

37

认为: C:\\Program Files\\Microsoft SQL Server\\devtools\\x86lib)将开发用到的包包含到工程中。

2.进行ESQL预编译

做完上述初始化后,编写你的ESQL文件,用任何文本编辑器都可以,只不过要注意编写完后的文件扩展名为.sqc。这里我提供一个已编译运行通过的ESQL程序: #include #include

EXEC SQL BEGIN DECLARE SECTION; char deptname[20]; char HSno[9]; char HSname[20]; char HSsex[4]; int HSage; int NEWAGE;

EXEC SQL END DECLARE SECTION;

long SQLCODE;

EXEC SQL INCLUDE sqlca;

int main() { int count=0; char yn;

printf(\请输入您要更新的系名(Sdept):\ scanf(\

EXEC SQL CONNECT TO 服务器名.数据库名 USER 登录名.密码; // EXEC SQL DECLARE SX CURSOR FOR

SELECT Sno,Sname,Ssex,Sage

38

注意此处的格式

FROM Student

WHERE SDept=:deptname;

EXEC SQL OPEN SX; for(;;) {

EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; if(sqlca->sqlcode==0)

break;

if(count++==0) { }

printf(\ printf(\是否修改年龄?(y/n)\ do {

scanf(\

printf(\

}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y'); if(yn=='y'||yn=='Y') { } else {

printf(\是否退出程序?(Y/N)\ do

39

printf(\输入新的年龄:\ scanf(\ EXEC SQL UPDATE Student

SET Sage=:NEWAGE WHERE CURRENT OF SX;

}

}

{

scanf(\

}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y'); if(yn=='y'||yn=='Y') {

break; } }

EXEC SQL CLOSE SX; EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT ALL;

保存为sql.sqc(注意具体实现时要修改EXEC SQL CONNECT TO 服务器名.数据库名 USER 登录名.密码;)

然后打开命令提示符(cmd) 键入: nsqlprep ESQL程序保存路径\\sql.sqc /SQLACCESS /DB 服务器名.数据库名 /PASS 登录名.密码

(!!!!!!注意将服务器名、数据库名、登录名、密码 修改成具体你计算机中的!!!!!!) 说明:

/SQLACCESS 通知nsqlprep自动地为嵌入式SQL程序中的静态SQL语句创建相应的存储过程

/DB 服务器名.数据库名 指明要连接的服务器以及数据库名称 /PASS 登录名.密码 给出登录名及相应的密码

要想连接成功,你的SQL必须打开了SQL server 身份验证模式。

程序中所引用的Student表是:Student(Sno char[20],Sname char[20],Ssex char[2],Sage int,Sdept char[10])

如果不知道登录名,可以使用默认,SQL server 2000 默认登录为sa,密码可以修改:

修改方法:运行企业管理器,展开你要连接的服务器,再展开安全性目录,点击登录,在右边窗口用鼠标右击sa,单击属性,在密码一栏输入新密码,单击确定后再输入

40

一次新密码,sa的密码就修改成功了。

预编译成功后,会产生一个同名的c文件(就算编译失败,编译时有提示,主要是ESQL语法错误,具体修改就可以了)。 3.进行C编译

运行VC++6.0,新建一个\Console Application\注意是\Console Application\不要选成了\Application\的工程,然后将预编译生成的c文件加入工程。此时还不能编译成功,需添加两个库文件SQLakw32.lib,Caw32.lib。 操作过程:

(1). 文件->新建->工程->WIN32 Console Application->输入工程名->确定 (2). 工程->设置->连接->在对象/库模块中输入SQLakw32.lib Caw32.lib (!!两个之间用空格分开!!)

完成上述操作后, 就可以开始编译、连接及运行了。

实验九 JDBC连接数据库

一)、实验目的与要求

1、.了解JDBC轻量级的几种连接方式。 2、)安装SQL Server2000的SP4补丁。

3、.在Eclipse下学习SQL Server2000的JDBC连接,改造自己的程序,实现最基本的数据库插入、删除、修改和查询等操作。

二)、实验内容:(说明:需写实验报告(6))

1.下载JDBC;

2.封装数据库链接; 3.实现图形化界面;

4.实现对学生数据的查询、添加、删除和修改功能。

三)、主要程序清单1: import java.sql.*;

public class connectURL3 {

public static void main(String[] args) {

41

String

connectionUrl=\a\ Connection con=null; Statement stmt=null; ResultSet rs = null; try {

Class.forName(\ con = DriverManager.getConnection(connectionUrl);

String SQL = \学生号,姓名,性别,班级 FROM 学生 WHERE 班级='02'\

stmt = con.createStatement(); rs = stmt.executeQuery(SQL); while (rs.next()) {

System.out.println(rs.getInt(\学生号\ \姓名\性别\ \班级\ }

}catch (Exception e) {

e.printStackTrace(); }

finally {

if (rs != null) try { rs.close(); }catch(Exception e) {}

if (stmt != null) try { stmt.close(); }catch(Exception e) {} if (con != null) try { con.close(); }catch(Exception e) {} }

}//main方法结束 }//类定义结束

四、注意JDBC环境配置和使用问题

配置和使用JDBC

JDBC(Java Data Base Connectivity,java数据库连接)是用于DBMS与应用程序之间通讯的一组用java语言编写的类和接口,也就是指java在数据库应用程序开发方面的一组API函数。因此学习JDBC就是学会使用这些API,在java中这些API定义在sql包中,所以在程序的开始要导入sql包。JDBC API针对不同的数据库管理系统有不同的数据库驱动,在使用JDBC之前首先要取得相应数据库JDBC驱动,在这里我们要连接微软的SQL 2000数据库,因此需要获得Microsoft SQL Server JDBC Driver,可以在微软的中文官网搜索进行下载。

42

下载完成后是一个exe可执行压缩文件,双击将其解压到任意目录中,然后会在该目录下会产生一个Microsoft SQL Server JDBC Driver 2.0文件夹,在这个文件夹中包含了JDBC驱动程序的jar包和关于JDBC驱动程序的帮助文档(帮助文档是个重要的工具,对于JDBC的连接和使用,帮助文档里有详细的介绍和实例),Jar包有两个,sqljdbc.jar和sqljdbc4.jar。

驱动程序有了,接下来的工作是要Java程序找到该驱动程序jar包,有两种方法:一种是设置类环境变量,另一种则是直接将驱动程序jar包拷贝到JDK运行时类库目录下。初学者建议采用第二种方法,第二种方法简单但不利于应用程序的部署。

下面是两种方法的详细过程说明:

1.设置类环境变量

我的电脑->右击选择”属性”->进入”高级”选项卡->单击”环境变量”->在用户变量里新建一个环境变量->变量名输入classpath->变量值输入sqljdbc4.jar所在位置及名称->注意:在值的最后要带上一个英文分号”;”

例如:驱动程序解压在E盘根目录下,则类环境classpath应设置为E: \\Microsoft SQL Server JDBC Driver 2.0\\sqljdbc_2.0\\chs\\sqljdbc4.jar;(注意分号不要掉了)

2.复制到运行时目录

将sqljdbc4.jar文件复制到jre安装目录中的lib\\ext\\目录下,默认安装则为:C:\\Program Files\\Java\\jre6\\lib\\ext\\

驱动设置好后,接下来就可以开始编写java程序连接数据库并访问和处理数据库中的内容了。等等,还有一个针对数据库版本的问题,微软官方网站声明: SQL Server JDBC Driver 2.0,适应任何 Java 应用程序、应用程序服务器或支持 Java 的小程序访问 SQL Server 2000、SQL Server 2005 和 SQL Server 2008。微软只说出了主版本,其实还要注意子版本的差异。低于 Microsoft SQL server 2000 SP4版本的SQL服务器没有将JDBC连接的默认1433端口打开,因此需要打上SP4 的补丁。(补丁可以在网上搜索并下载到)

Java中使用JDBC连接数据库大体可分为以下四个步骤(见java程序设计教程第12章):

① 设置驱动程序(注册一个驱动); ②与数据库建立连接;

③实例化语句对象,并发送SQL语句; ④处理SQL执行结果; ⑤关闭JDBC对象。

示例程序:

import java.sql.*; //导入sql API 包 public class connectURL2

43

{

public static void main(String[] args) {

Connection con=null; Statement stmt=null; ResultSet rs = null; try {

Class.forName(\ //设置驱动程序(注册驱动程序)

con=DriverManager.getConnection(\me=XKJ\

/*建立数据库连接 调用DriverManager的静态getConnection方法,该方法有多种重载方法,这里给出两种:

DriverManager.getConnection(String URL) 其中URL的格式为: \数据库名;user=sa;password=123456\

DriverManager.getConnection(String URL,String USER,String PASSWORD) 其中URL的格式为:” jdbc:sqlserver://127.0.0.1:1433;DatabaseName=数据库名”

USER为登录数据库的用户名,PASSWORD为登录密码。 */

String SQL = \学生号,姓名,性别,班级 FROM 学生 WHERE 班级='02'\

//定义SQL语句

stmt = con.createStatement(); //实例化语句对象

rs = stmt.executeQuery(SQL);

/*执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。也可以调用iexecuteUpdate(String sql) 方法来执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。 */

while (rs.next()) {

System.out.println(rs.getInt(\学生号\姓名\性别\班级\//处理结果

//getInt(int columnIndex) 以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列号的值。

//getInt(String columnLabel) 以 Java 编程语言中 int 的形式获取此 ResultSet

44

对象的当前行中指定列名的值。

// getString(int columnIndex) 以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列号的值。

// getString(String columnLabel) 以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列名的值。 //具体还有其他的get方法,请参阅JDK_API }

}catch (Exception e) //捕捉异常 {

e.printStackTrace(); }

finally {

//关闭JDBC对象,释放连接

if (rs != null) try { rs.close(); }catch(Exception e) {}

if (stmt != null) try { stmt.close(); }catch(Exception e) {} if (con != null) try { con.close(); }catch(Exception e) {} } } }

主要程序清单2:

package com.java.dbmanager;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;

import java.sql.SQLException; import java.sql.Statement;

public class SqlDataBase { private static Connection dbConn ; private String driverName = \ private String dbURL = \ private String dbName = \ private String userName = \ private String userPwd = \ private ResultSet rs; private Statement statement;

45

/**初始化数据库连接参数

* @param server要连接数据库的服务器名称或ip * @param dbName数据库名称 * @param user用户名 * @param password密码 * **/

public SqlDataBase(String server,String dbName,String user,String password) { dbURL = \ if(server!= null) dbURL += server.trim() + \ else dbURL += \ if(dbName != null) this.dbName = dbName; userName = user; userPwd = password; }

/**获取连接**/

public void initConnection() { if(dbConn == null) { try { Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); dbConn.setCatalog(dbName); System.out.println(\ } catch (ClassNotFoundException ex) { System.out.println(\驱动器类加载有误\ return ; } catch (SQLException e) { System.out.println(e.getMessage()); return ; } } }

46

/** sql更新查询

* @param sql 查询语句

* @return 返回一个ResultSet结果集 * @exception SQLException */ public ResultSet getResult(String sql) { if(dbConn == null) initConnection(); try { statement = dbConn.createStatement(); rs = statement.executeQuery(sql); } catch (SQLException e) { rs =null; e.printStackTrace(); } return rs; } /** * sql更新语句 * @param sql 数据库更新语句 * @return 更新数据库影响行数 * @exception SQLException */ public int executeSql(String sql) { if(dbConn == null) initConnection(); System.out.println(sql); int effectedRows=0; try{ statement = dbConn.createStatement(); effectedRows = statement.executeUpdate(sql); }catch(SQLException ex){ ex.printStackTrace(); System.out.println(\数据库写操作失败!\ } return effectedRows; } /** * 释放系统连接资源 */

47

public void dispose() { try { if(rs!=null) rs.close();

} catch (SQLException e) { e.printStackTrace(); } try { if(statement!=null) statement.close(); } catch (SQLException e) { e.printStackTrace(); } try { if(dbConn!=null) dbConn.close(); } catch (SQLException e) { e.printStackTrace(); } } } 四)、运行结果:

48

图 学生信息查询系统

49

本文来源:https://www.bwwdw.com/article/cn2a.html

Top