数据库原理实验六——odbc/jdbc数据库编程(代码片段)

Alfredyoung Alfredyoung     2023-01-23     458

关键词:

实验目的

  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_cid
  FOREIGN KEY (c_id)
  REFERENCES customer (c_id)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
ADD CONSTRAINT finances_fk_fid
  FOREIGN KEY (p_id)
  REFERENCES finances_product (p_id)
  ON DELETE NO ACTION
  ON 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_cid
  FOREIGN KEY (c_id)
  REFERENCES customer (c_id)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,
ADD CONSTRAINT fund_fk_fid
  FOREIGN KEY (f_id)
  REFERENCES fund (f_id)
  ON DELETE NO ACTION
  ON 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
AS
	SELECT c_id,c_name,c_id_card,count(*)
	FROM customer,bank_card
	WHERE c_id = b_c_id
	GROUP BY c_id;

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

ALTER VIEW V_BANK_CARD
AS
	SELECT c_id,c_name,c_id_card,count(*)
	FROM customer,bank_card
	WHERE 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;

数据结构-实验六排序

实验六  排序 l 实验目的1、排序的基本概念     1.掌握在数组上进行各种排序的方法和算法。     2.深刻理解各种方法的特点,并能灵活应用。     3.加深对排... 查看详情

实验六:pl/sql编程基础

实验六:PL/SQL编程基础(1)实验目的熟悉掌握PL/SQL编程中的变量定义语句熟悉掌握PL/SQL编程中的条件语句和循环语句等流程控制语句。能熟练使用上述基本语句编写PL/SQL代码完成指定的数据处理功能。实验内容简单PL... 查看详情

实验六附加:pl/sql编程基础

实验六附加:PL/SQL编程基础(1)实验目的熟悉掌握PL/SQL编程中的变量定义语句熟悉掌握PL/SQL编程中的条件语句和循环语句等流程控制语句。能熟练使用上述基本语句编写PL/SQL代码完成指定的数据处理功能。实验内容1... 查看详情

如何用mysql实现odbc(jdbc桥)连接数据库?

我想在eclipse下面用ODBC(JDBC桥)连接mysql数据库,我在ODBC里面配制数据源的时候,在里面没有找mysql对应的数据驱动程序,是不是还需要添加?如果要添加该怎么样添加呢?mysql可以象sqlserver这样实现ODBC吗?步骤(1):加载要使用... 查看详情

数据库系统概论实验六完整性控制(代码片段)

一、实验目的1.掌握数据库完整性控制原理2.掌握SQLServer数据库系统完整性控制方法二、实验内容创建一个触发器,“数据库”课程的选课人数不能超过5人。创建一个触发器,规定每位同学选课门数不能超过3门... 查看详情

无需 ODBC/JDBC 即可查询数据的 Amazon Redshift C# 客户端

】无需ODBC/JDBC即可查询数据的AmazonRedshiftC#客户端【英文标题】:AmazonRedshiftC#clienttoquerydatawithoutODBC/JDBC【发布时间】:2018-08-1006:01:16【问题描述】:是否有任何方法可以在不使用JDBC/ODBC驱动程序的情况下从C#中从AmazonRedshift获取数... 查看详情

大学计算机相关专业实验实训整理

...四处理机调度|实验五存储管理操作系统实验六文件管理数据库原理实验实训数据库原理实验一、二、三数据库原理实验四、五、六大数据可视化实验实训实验一:大数据可视化工具-Excel实验二:大数据可视化工具-Tableau... 查看详情

实验六(代码片段)

 Part1:编程练习1:补足程序学生的记录由学号和成绩组成。N名学生的数据已在主函数中放入结构体数组stu中。编写函数?ndMinlist,实现:把分数低的学生数据放在数组t中,函数返回分数低的学生的人数。(注意:分数低的学生可... 查看详情

大学计算机相关专业实验实训整理

...四处理机调度|实验五存储管理操作系统实验六文件管理数据库原理实验实训数据库原理实验一、二、三数据库原理实验四、五、六大数据可视化实验实训实验一:大数据可视化工具-Exc 查看详情

实验六移位寄存器及其应用(代码片段)

目录一、预习要求二、实验目的三、实验原理1、移位寄存器2、移位寄存器的应用(1)用74LS194构成环形计数器(2)用74LS194实现数据串行/并行转换①串行/并行转换器②并行/串行转换器四、实验设备与器件五、实... 查看详情

实验六(代码片段)

Part1:结构体类型及编程应用补足程序ex1_2.cpp,附上补足后的程序源码,输入不同测试数据,给出运行结果截图#include<stdio.h>constintN=5;//定义结构体类型structstudent,并定义STU为其别名typedefstructstudentlongno;charname[20];intscore;STU;//函... 查看详情

实验六(代码片段)

  Part1:结构体类型及编程应用1,验证性实验学生成绩信息包括学号、姓名、考试课程、平时成绩、期中成绩、期末成绩、总评成绩和等级(优:90-100、良:80-89、中:70-79、及格:60-69、不及格:<60)。建立一个描述学生某... 查看详情

实验四数据选择器及其应用(代码片段)

目录一、实验预习要求二、实验目的三、实验原理1、双4选1数据选择器74LS1532、8选1数据选择器74LS1513、数据选择器的具体应用四、实验设备与器件五、实验内容与步骤六、实验报告要求更多相关文章点这里哦一、实验预习要求1... 查看详情

数据库系统概论实验六完整性控制(代码片段)

一、实验目的1.掌握数据库完整性控制原理2.掌握SQLServer数据库系统完整性控制方法二、实验内容创建一个触发器,“数据库”课程的选课人数不能超过5人。创建一个触发器,规定每位同学选课门数不能超过3门... 查看详情

tinywebdb+mqtt实现掌控板抢答实验

...内容三、实验软硬件环境四、实验过程1、TinywebDB实现云数据库出题2、MQTT实现多端同步通讯3、Mind+按键抢答和判题图形化程序五、实验结果六、总结一、实验目的及要求实现掌控板抢答器功能。二、实验原理与内容基于TinywebD... 查看详情

mooc《linux操作系统编程》学习笔记-实验六(代码片段)

实验六线程同步实验https://www.icourse163.org/learn/UESTC-1003040002?tid=1455108444#/learn/content?type=detail&id=1228729539&cid=1245454470实验六 线程同步实验https://www.icourse163.org/learn/UESTC-1003040002?tid=14 查看详情

apache点燃了odbc/jdbc驱动程序初始化的原因

我正在使用Apache点燃而没有与数据库进行任何集成。我在Windows机器上遇到异常。经过调查,发现ODBC驱动程序使用了我遇到错误的端口。https://apacheignite.readme.io/v1.7/docs/connecting-string我不知道Ignite是否需要它,但是现在我们可以禁... 查看详情

sdut3403数据结构实验之排序六:希尔排序

数据结构实验之排序六:希尔排序TimeLimit: 1000MS MemoryLimit: 65536KBSubmit StatisticProblemDescription我们已经学习了各种排序方法,知道在不同的情况下要选择不同的排序算法,以期达到最好的排序效率;对于待排序数据来... 查看详情