实验六访问数据库
一、实验目的
1、熟悉通过嵌入式SQL(主语言为C++语言)编程访问数据库,及掌握游
标的使用方法
2、熟悉通过ODBC接口访问异构数据库并对异构数据库进行操作
3、学会配置ODBC数据源
4、学会各种数据库的访问方法
二、实验要求
1、编写一个嵌入式C++程序,实现对SQL Server 2005数据库中的 “学生课程数据库”的Student 表中的年龄进行更新,即系统每输出一个学生记录,询问用户是否更新。如果要更新,就输入新的年龄。要求:提交源程序并标识必要的注释。
源代码:
#include <iostream.h>
void main( )
{
int count = 0;
char yn; /*变量yn代表yes或no*/
EXEC SQL BEGIN DECLARE SECTION; /*主变量定义区*/
char deptname[64];
char HSno[64];
char HSname[64];
char HSsex[64];
int HSage;
int NEWAGE;
EXEC SQL END DECLARE SECTION; /*主变量说明结束*/
EXEC SQL INCLUDE sqlca; /*定义SQL通信区*/
cout<<"Please choose the department name(CS/MA/IS):\n ";
cin>>deptname; /*为主变量deptname赋值*/
EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM" /"MANAGER";
/*连接“学生-课程数据库”,这里假设该数据库为TEST*/
EXEC SQL DECLARE SX CURSOR FOR /*定义游标*/
SELECT Sno, Sname, Ssex, Sage /*SX对应语句的执行结果*/
FROM Student
WHERE SDept = :deptname;
EXEC SQL OPEN SX; /*打开游标SX便指向查询结果的第一行*/
for ( ; ; ) /*用循环结构逐条处理结果集中的记录*/
{
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage;
/*推进游标,将当前数据放入主变量*/
if (sqlca.sqlcode != 0) /* sqlcode != 0,表示操作不成功*/
break; /*利用SQLCA中的状态信息决定何时退出循环*/
if(count++ == 0) /*如果是第一行的话,先输出行头标题*/
cout<< "Sno "<< "Sname "<< "Ssex "<< "Sage";
cout<< HSno<< " "<< HSname<< " "<< HSsex<< " "<< HSage);
cout<<"UPDATE AGE(y/n)?"; /*询问用户是否要更新该学生的年龄*/
do {
cin>>yn;
} while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');
if (yn == 'y' || yn == 'Y') /*如果选择更新操作*/
{
cout<<“INPUT NEW AGE:”; /*提示用户该学生的新年龄*/
cin>>NEWAGE; /*用户输入新年龄到主变量中*/
EXEC SQL UPDATE Student /*嵌入式SQL*/
SET Sage = :NEWAGE
WHERE CURRENT OF SX ;
} /*对当前游标指向的学生年龄进行更新*/
}
EXEC SQL CLOSE SX; /*关闭游标SX不再和查询结果对应*/
EXEC SQL COMMIT WORK; /*提交更新*/
EXEC SQL DISCONNECT TEST; /*断开数据库连接*/
}
2、查有关C++、Java、C#中有关资料,分别写出C++、Java、C#访问 SQL Server 2005数据库数据的方法及步骤。(只写你学的那门语言即可)
Java访问sql sever数据库的方法:
通过JDBC访问
JDBC连接SQL Server 2005数据库 的步骤:
1. 关闭防火墙。
2. 配置TCP端口:
a. 开始->所有程序->Microsoft SQL Server 20##->配置工具->SQL Server配置管理器->SQL Server 20## 网络配置->MSSQLSERVER协议
b. 启用―TCP/IP‖(右键单击选择―启动‖)[http://www.colalife.com]
c. 双击―TCP/IP‖->―IP 地址‖->―IPAll‖->―TCP 端口‖项添加默认的―1433‖端口
3. 外围应用配置:Microsoft SQL Server 20##->配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->
①选SQLEXPRESS->Database Engine->远程连接->本地连接和远程连接->同时使用TCP/IP和named pipes
②选SQL Server Browser->服务->启动类型改为―自动‖->应用->启动->确定
4. 修改默认的登录验证模式(如果在安装过程中是默认按―Windows 身份验证模式‖方式安装,所以sa登录是被禁用的,即使将身份验证模式更改为―SQL Server 和 Windows 身份验证模式‖,sa登录仍处于禁用状态,所以需要启用sa登录帐户):
①在SQL Server Management Studio 的对象资源管理器中,安全性->登录名->右击―sa‖->属性->
常规->将登录名sa的密码和确认密码设为强密码->状态->登录->启用->确定
②在SQL Server Management Studio 的对象资源管理器中,右击服务器->属性->安全性->服务器身份验证->选择―SQL Server和Windows身份验证模式‖->确定->确定
5. 在SQL Server Management Studio中新建一个数据库(例如―mytest‖,如果测试程序带有数据库文件也可不用新建而直接附加到当前SQL Server数据库服务器);在SQL Server Management Studio 的对象资源管理器中右击服务器->重新启动->是
6. 运行下载的JDBC文件―sqljdbc_1.2.2828.100_chs.exe‖,解压到―C:\Program Files‖文件夹中;[http://www.colalife.com]
将Classpath设置为包含sqljdbc.jar文件(也可加到系统环境变量中),建议从解压文件夹下找到sqljdbc.jar,将其复制到自己常用的Jar文件夹里,用的时候方便找到。
7. 在Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5 进行JDBC连接设置并测试
1、打开Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5,新建Java Project‖,项目名为Test
2、选择―Window‖→―Preferences‖→―Java‖→―Installed JREs‖,选定已安装的 JRE,点击―Edit...‖→―Add External JARs‖,找到sqljdbc.jar并添加—>OK
3、"Window"->"Open Perspective"->"MyEclipse Database Explorer"->(左侧)"DB Browser"右键―New‖->填写链接属性Driver name,URL为:jdbc:sqlserver:// localhost:1433;databaseName=mytest,User name:sa,Password:密码。然后在Driver JARs 点Add JARs 添加sqljdbc.jar,点及Test
Driver测试,勾上Save Password保存密码,点击完成结束——即完成了在DB Browser中连接数据库配置。
8、编写Java代码测试,如下: package jdbc.test;
import java.sql.*;
public class Test {
public static void main(String[] srg) {
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // 加载JDBC驱动
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=mytest"; // 连接服务器和数据库mytest
String userName = "sa"; // 默认用户名
String userPwd = "123456"; //密码
Connection dbConn = null;
Statement stmt = null;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
stmt = dbConn.createStatement();
System.out.println("Connect Succeed!"); // 连接成功控制台输出语句
ResultSet rs = stmt.executeQuery("select * from mytest");
while (rs.next()) {
System.out.print(rs.getInt(1)+" "+rs.getSring(2) + " "+ rs.getString(3) + "\n"); }
} catch (Exception e) {
e.printStackTrace();
}
}
}
9. Sql Server2000和2005的连接代码区别:(注意2000和2005的不同)
1. 连接SqlServer2000
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";
2. 连接SqlServer2005
Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");
URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
10、可能出现的:
exception: com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit> WARNING: Failed to load the sqljdbc_auth.dll
解决办法:在sqljdbc_1.2.2828.100_chs.exe解压后的文件夹中找到Microsoft SQL Server 20## JDBC Driver\sqljdbc_1.2\chs\auth\x86下的sqljdbc_auth.dll拷贝到:C:WINDOWSsystem32 目录下即可。
3、编写程序,将SQL Server数据库的某个表中的数据备份到KingbaseES数据库中的某个表中。其中:KingbaseES数据库是中国人民大学开发的一个国产 RDBMS,可以从http://www.kingbase.com.cn/上下载。(选做题)
第二篇:广东海洋大学数据库期末试题
12 .学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用 E 一 R 图画出此学校的概念模型。
答:
13 .某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用 E 一 R 图画出此工厂产品、零件、材料、仓库的概念模型。
3 .用 sQL 语句建立第二章习题 5 中的 4 个表。
答:
对于 S 表: S ( SNO , SNAME , STATUS , CITY ) ;
建 S 表:
CREATE TABLE S ( Sno C(2) UNIQUE,Sname C(6) ,Status C(2),City C(4));
对于 P 表: P ( PNO , PNAME , COLOR , WEIGHT );
建 P 表 :
CREATE TABLE P(Pno C(2) UNIQUE,Pname C(6),COLOR C(2), WEIGHT INT);
对于 J 表: J ( JNO , JNAME , CITY) ;
建 J 表:
CREATE TABLE J(Jno C(2) UNlQUE,JNAME C(8), CITY C(4))
对于 sPJ 表: sPJ ( sNo , PNo , JNo , QTY) ;
建 SPJ 表:SPJ(SNO,PNO,JNO,QTY)
CREATE TABLE SPJ(Sno C(2),Pno C(2),JNO C(2), QTY INT))
4.针对上题中建立的 4 个表试用 sQL 语言完成第二章习题 5 中的查询。
( l )求供应工程 Jl 零件的供应商号码 SNO ;
SELECT SNO FROM SPJ WHERE JNO='J1'
( 2 )求供应工程 Jl 零件 Pl 的供应商号码 SNO ;
SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1'
??( 3 )求供应工程 Jl 零件为红色的供应商号码 SNO ;
SELECT SNO FROM SPJ,P WHERE JNO='J1' AND SPJ.PNO=P.PNO AND COLOR='红'( 4 )求没有使用天津供应商生产的红色零件的工程号 JNO ;
SELECT JNO FROM SPJ WHERE JNO NOT IN (SELECT JNO FROM SPJ,P,S WHERE S.CITY='天津' AND COLOR='红' AND S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO)
( 5 )求至少用了供应商 Sl 所供应的全部零件的工程号 JNO ;
由于VFP不允许子查询嵌套太深,将查询分为两步
A、查询S1供应商供应的零件号
SELECT PNO FROM SPJ WHERE SNO='S1'
B、查询哪一个工程既使用P1零件又使用P2零件。
SELECT JNO FROM SPJ WHERE PNO='P1'
AND JNO IN (SELECT JNO FROM SPJ WHERE PNO='P2')
5.针对习题3中的四个表试用SQL语言完成以下各项操作:
(1)找出所有供应商的姓名和所在城市。
SELECT SNAME,CITY FROM S
(2)找出所有零件的名称、颜色、重量。
SELECT PNAME,COLOR,WEIGHT FROM P
(3)找出使用供应商S1所供应零件的工程号码。
SELECT JNO FROM SPJ WHERE SNO='S1'
(4)找出工程项目J2使用的各种零件的名称及其数量。
SELECT PNAME,QTY FROM SPJ,P
WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2'
(5)找出上海厂商供应的所有零件号码。
SELECT PNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND CITY='上海'
(6)出使用上海产的零件的工程名称。
SELECT JNAME FROM SPJ,S,J
WHERE S.SNO=SPJ.SNO AND S.CITY='上海' AND J.JNO=SPJ.JNO
(7)找出没有使用天津产的零件的工程号码。
SELECT JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY<>'天津'
(8)把全部红色零件的颜色改成蓝色。
UPDATE P SET COLOR='蓝' WHERE COLOR='红'
(9)由S5供给J4的零件P6改为由S3供应。
UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'
(10)从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。
A、DELETE FROM S WHERE SNO=’S2’
B、DELETE FROM SPJ WHERE SNO=‘S2’
(11)请将(S2,P4,J6,200)插入供应情况关系。
INSERT INTO SPJ VALUES('S2','P4','J6',200)
2 .试述数据库设计过程各个阶段上的设计描述。
答:各阶段的设计要点如下:
( l )需求分析:准确了解与分析用户需求(包括数据与处理)。
( 2 )概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。
( 3 )逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。
( 4 )数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
( 5 )数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
( 6 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。