实验目的

  1. 熟练掌握ODBC数据库访问技术和编程方法。
  2. 掌握除ODBC外的其他数据库访问编程技术。

实验内容

这个实验首先需要配置ODBC数据源,以下是配置的流程

首先在MySQL官网下载数据源驱动程序:下载地址

注意选择64bit的,下载后安装即可。


完成安装。

  1. ODBC数据源配置以及程序调试。(20分)

(1) 配置一个ODBC数据源,要求数据源名称:student,其中包含s表(学生信息表)。

配置ODBC数据源,打开控制面板->管理工具->ODBC数据源(64位)–>系统DSN,单击添加:

完成如下配置,其中IP地址是127.0.0.1代表本地数据库。

完成这步后点击Test,测试一下是否成功。
(2) 理解ODBC编程,阅读并运行实验给出的例子程序(MFC或者CSharp代码),要求简单写出自己对这段程序的理解或者流程图,并且给出程序运行结果截图。

我这里演示一下MFC程序的运行结果,(主要是我不会C#,呜呜呜)


刚才创建的数据源名字叫student,这里要修改一下,然后密码也修改成自己的密码。然后生成解决方案,开始执行。

然后我在这里犯了一个非常愚蠢的错误,从代码可以看出他这里用的SNO是一个char类型的变量,但我在student里使用的是INT类型,这里把自己创建的student里的表删除,换成老师给的就好。

  1. 参考以上的ODBC编程例子程序,使用ODBC编程技术,编写一个简单的程序,包含对数据库SPJ_MNG的连接,查询,插入,修改和删除。(30分)

首先创建一个MFC程序,具体可以参考这篇文章:MFC中创建一个基于对话框的应用程序

要实现MFC的GUI界面还需要使用CRecordset类的成员函数:
参考资料如下:
CRecordset类的常用成员函数
利用支持ODBC的CRecordset类实现对数据库的操作
3. 银行场景化综合应用实验。(50分)

(1) 身份证号为“610103123456781234”的人在C银行注册了一个新客户,并且申请办理了一张新的储蓄卡。在客户表和银行卡表中插入该客户记录。(2分)

INSERT
INTO customer
VALUES(31,'刘一','610103123456781234','18815650031','gaussdb');

(2) 根据业务需要添加表的约束,约束添加成功后进行验证。(3分)
① 在银行卡表,理财产品购买表,保险购买表,基金购买表中,添加正确的外键约束:客户编号设置为外键,参照客户表的客户编号;理财产品编号,保险编号,基金编号分别参照对应的表中的编号;支付银行卡号参考银行卡表的卡号。
银行卡表的外键约束:

ALTER TABLE bank_card
ADD CONSTRAINT bankcard_fk_cid    FOREIGN KEY (b_c_id)    REFERENCES customer (c_id)    ON DELETE NO ACTION    ON UPDATE NO ACTION;

理财产品表的外键约束:

ALTER TABLE c_finances
ADD CONSTRAINT finances_fk_cidFOREIGN KEY (c_id)REFERENCES customer (c_id)ON DELETE NO ACTIONON UPDATE NO ACTION,
ADD CONSTRAINT finances_fk_fidFOREIGN KEY (p_id)REFERENCES finances_product (p_id)ON DELETE NO ACTIONON UPDATE NO ACTION;

保险购买表的外键约束:

ALTER TABLE c_insurance
ADD CONSTRAINT insurance_fk_cid  FOREIGN KEY (c_id)  REFERENCES customer (c_id)  ON DELETE NO ACTION  ON UPDATE NO ACTION,
ADD CONSTRAINT insurance_fk_iid  FOREIGN KEY (i_id)  REFERENCES insurance (i_id)  ON DELETE NO ACTION  ON UPDATE NO ACTION;

基金购买表的外键约束:

ALTER TABLE c_fund
ADD CONSTRAINT fund_fk_cidFOREIGN KEY (c_id)REFERENCES customer (c_id)ON DELETE NO ACTIONON UPDATE NO ACTION,
ADD CONSTRAINT fund_fk_fidFOREIGN KEY (f_id)REFERENCES fund (f_id)ON DELETE NO ACTIONON UPDATE NO ACTION;

② 在以上基本表中,存在金额或者价格相关的6个属性。在现实生活中,金额或者价格不会存在负数。因此针对这些属性,添加其值大于0的约束条件。注意,对于银行卡是“信用卡”的情况余额可以为负,所以不要设定余额大于0的约束。

我是真没找到6个是哪6个

ALTER TABLE bank_card
ADD CONSTRAINT b_chk
CHECK((b_balance >= 0 AND b_type != '信用卡') OR (b_type = '信用卡'));ALTER TABLE finances_product
ADD CONSTRAINT f_chk
CHECK(p_price >= 0);ALTER TABLE fund
ADD CONSTRAINT fund_chk
CHECK(f_price >= 0);ALTER TABLE insurance
ADD CONSTRAINT i_chk
CHECK(i_price >= 0);ALTER TABLE c_finances
ADD CONSTRAINT cf_chk
CHECK(p_purchase_money >= 0);ALTER TABLE c_fund
ADD CONSTRAINT cfund_chk
CHECK(f_purchase_money >= 0);ALTER TABLE c_insurance
ADD CONSTRAINT ci_chk
CHECK(i_purchase_money >= 0);

(3) 模拟以下的业务写出SQL查询语句进行查询。(10分)
① 查询C银行所有银行卡的卡号和类型信息。

SELECT b_number,b_type
FROM bank_card;

② 查询C银行拥有的客户数量。

SELECT COUNT(*)
FROM customer;

③ 查询拥银行卡的所有客户编号,姓名和身份证号。

SELECT c_id,c_name,c_id_card
FROM customer,bank_card
WHERE c_id = b_c_id
GROUP BY c_id
;

④ 统计所有的银行卡中,储蓄卡和信用卡的各自数量。

SELECT b_type,COUNT(b_type)
FROM bank_card
GROUP BY b_type;

⑤ 查询保险表中,保险价格的平均值。

SELECT AVG(i_price)
FROM insurance;

⑥ 查询保险表中保险价格的最大值和最小值所对应的险种和价格。

SELECT i_name,i_price
FROM insurance
GROUP BY i_id
HAVING i_price = (SELECT MAX(i_price) FROM insurance) or i_price = (SELECT MIN(i_price) FROM insurance);

⑦ 某人捡到一张卡,希望查询该银行卡号是’6222021302020000006’的客户编号,姓名和联系电话。

SELECT c_id,c_name,c_phone
FROM customer
WHERE c_id_card = '6222021302020000006';

⑧ 查询保险产品中保险价格大于平均值的保险名称和适用人群。

SELECT i_name,i_person,i_price
FROM insurance
GROUP BY i_id
HAVING i_price > (SELECT AVG(i_price) FROM insurance);

⑨ 查询C银行发布的理财产品总数,按照p_year分组。

SELECT p_year,count(*)
FROM finances_product
GROUP BY p_year;

⑩ 查询适用于老人的保险编号,保险名称,保险年限。

SELECT i_id,i_name,i_year
FROM insurance
WHERE i_person = '老人';

(4) 模拟以下的业务创建视图并基于视图进行查询。(2分)
① 创建一个视图,包含拥有银行卡的所有客户编号,姓名, 身份证号, 拥有的银行卡个数。

CREATE VIEW V_BANK_CARD
ASSELECT c_id,c_name,c_id_card,count(*)FROM customer,bank_cardWHERE c_id = b_c_idGROUP BY c_id;

② 修改视图:在原有视图的基础上,仅包含拥有信用卡的用户。

ALTER VIEW V_BANK_CARD
ASSELECT c_id,c_name,c_id_card,count(*)FROM customer,bank_cardWHERE c_id = b_c_id AND b_type = '信用卡'GROUP BY c_id;

(5) 模拟业务变化,人们对基金查询的需求大幅度增加。在基金购买表上创建复合索引:c_id ASC, f_id ASC, f_quantity DESC。(3分)

ALTER TABLE c_fund
ADD INDEX composite_index (c_id ASC, f_id ASC, f_quantity DESC) VISIBLE;

数据库原理实验六——ODBC/JDBC数据库编程相关推荐

  1. 【数据库原理实验(openGauss)】创建数据库、表和索引

    创建数据库.表和索引 文章目录 创建数据库.表和索引 一.创建数据库 二.创建与删除模式 三.创建与修改表 (1)创建表 (2)修改表 四.创建与删除索引 (1)创建索引 (2)删除索引 一.创建数据 ...

  2. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  3. 【数据库原理实验(openGauss)】金融场景化实验

    金融场景化实验 文章目录 金融场景化实验 一.金融数据模型 1.E-R图 2.关系模式 3.物理模型 Client(客户)表 bank_card(银行卡)表 finances_product(理财产品 ...

  4. 《数据库原理实验指导书》

    <数据库原理实验指导书> 河南科技大学软件学院 目录 实验规则 基本实验方法 实验环境 实验一 数据定义 实验二 数据更新 实验三 数据查询-简单查询和连接查询 实验四 数据查询-分组查询 ...

  5. 数据库原理实验二 数据库管理 实验报告

    广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...

  6. mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc

    数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...

  7. 数据库原理实验三 数据库综合设计实验 实验报告

    实验三 数据库系统设计综合实验 1.实验目的通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统. 2.实验要求熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的 ...

  8. mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc

    数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...

  9. 计算机网络原理 实验1 《Windows Socket编程》

    计算机网络原理 实验1 <Windows Socket编程> 一.实验目的 通过实验,熟悉并掌握计算机Windows 编程的基本知识,进一步加深对课堂所学基本内容的理解,掌握基本的Wind ...

  10. Oracle 实验六:PL/SQL编程基础(1)

    实验六:PL/SQL编程基础(1) 一.实验目的 1.熟悉掌握PL/SQL编程中的变量定义语句 2.熟悉掌握PL/SQL编程中的条件语句和循环语句等流程控制语句. 3.能熟练使用上述基本语句编写PL/ ...

最新文章

  1. 【CVPR2020】30篇最新论文抢先看!!!
  2. heartbeat自带的断网切换功能-ipfail
  3. centos 6.7 ssh免密登录配置
  4. css3+js打造炫酷图片展示
  5. mysql 重要维护工具 图解
  6. 高考分数出来了,计算机专业选择那个方向更香?
  7. OUTLOOK新邮件到达提醒设置以及outlook最小化到托盘设置
  8. StyleGAN v2:对StyleGAN v1的思考与改进
  9. 提升谷歌chrome浏览器下载速度的方法
  10. 路由器修改html,徒手修改大麦路由器dw33d,变luci中文界面,并开启ssh
  11. 移动硬盘——显示盘符但打不开
  12. 《Node.js区块链开发》PDF版电子书下载
  13. 概率论与数理统计学习笔记(6)——分布律,分布函数,密度函数
  14. 去掉图题注 空格_【转载】论文排版-Word插入题注时自动删除标签与编号前的空格,编号后添加空格...
  15. 用虚拟信用卡注册Google Play开发者账号
  16. 基于固件的漏洞挖掘方法梳理
  17. 8种开源的ETL工具
  18. win7重装mysql_win7(64位)彻底卸载mysql,重装不再烦恼
  19. png转jpg具体操作方法
  20. 每天进步一点之灵魂拷问14之网络连接2

热门文章

  1. pc机器人软件哪里买_买电脑,机器人仿真,3D建模软件,PLC程序,需要什么配置的电脑?...
  2. 精英网络技术论坛免杀基础
  3. 计算机vb期末试题及答案,VB期末考试试题及答案
  4. 《认知盈余》核心摘要——“人们实际上很喜欢创造并分享”: 参与是一种行为
  5. usb打印机命令_自己动手不求人 日常打印机故障全知晓
  6. 巧用电视卡让笔记本屏幕作PS2游戏显示器
  7. 科来网络分析系统网络故障分析方法
  8. Unity从Asset Store下载的资源安装包默认的保存位置及其修改
  9. PPT视频无法播放,编解码器不可用
  10. 【唯美日出win7热门主题】