广东海洋大学数据库实验六

时间:2024.4.27

 实验六访问数据库

一、实验目的

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 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。

更多相关推荐:
东南大学高等数学实验报告

高等数学数学实验报告实验人员院系学号姓名实验地点计算机中心机房实验一一实验题目设数列xn由下列递推关系式给出x观察数列1x111x211xn1112xn1xnxnn122的极限二实验目的和意义利用数形结合的方法...

东南大学高等数学数学实验报告

高等数学A下册数学实验实验报告姓名刘川学号02A13306实验一空间曲线与曲面的绘制实验题目利用参数方程作图作出由下列曲面所围成的立体1Z22x及xOy面2zxyxy10及z0实验方案1输入如下命令s1Para...

东南大学数学建模实验报告

东南大学数学建模实验报告学号姓名成绩一实验名称中国近30年的人口马尔萨斯模型一实验目的1掌握matlab绘制拟合图的方法2掌握马尔萨斯模型建立的方法3通过实验了解马尔萨斯模型的有点和缺陷二在网上收集相关的资料三...

东南大学高等数学A(上册)数学实验报告

高等数学数学实验报告实验人员院系计算机学号姓名成绩实验时间20xx年12月25日9001130实验一观察数列的极限一实验题目一1nlim1e根据上面的实验步骤通过作图观察重要极限nn二实验目的和意义从点图上看出...

东南大学大一下高等数学实验报告

高等数学数学实验报告实验人员院系电子学号姓名成绩实验一一实验题目观察级数n1nnn的部分和序列的变化趋势并求和二实验目的和意义学会利用Mathematics显示级数部分和的变化趋势并且通过实验中得到的部分和图像...

东南大学高等数学(下册)数学实验报告

10113学期高等数学数学实验报告实验人员院系学号姓名成绩实验时间20xx年5月28日1作出各种标准二次曲面的图形1球面程序设计程序运行结果实验一2椭圆抛物面程序设计程序运行结果Plot3Dxyx1010y10...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学数学实验报告(33篇)