北邮 大三下 数据库实验四 mysql版本.docx

上传人:飞****2 文档编号:60221034 上传时间:2022-11-15 格式:DOCX 页数:11 大小:405.21KB
返回 下载 相关 举报
北邮 大三下 数据库实验四 mysql版本.docx_第1页
第1页 / 共11页
北邮 大三下 数据库实验四 mysql版本.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《北邮 大三下 数据库实验四 mysql版本.docx》由会员分享,可在线阅读,更多相关《北邮 大三下 数据库实验四 mysql版本.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验报告学 院: 计算机学院 课程名称: 数据库系统 实验名称: 实验四 数据库接口实验1 班 级: 姓 名: schnee 学 号: 实验四 数据库接口实验一1. 实验目的通过实验了解通用数据库应用编程接口ODBC的基本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的基本原理和方法2. 实验要求要求所编写的数据库访问应用程序中使用到以下主要的ODBC API函数:(1) SQLALLocEnv:初始化ODBC环境,返回环境句柄(2) SQLALLocConnect:为连接

2、句柄分配内存并返回连接句柄(3) SQLConnect:连接一个SQL数据资源(4) SQLDriverConnect:连接一个SQL数据资源,允许驱动器向用户询问信息(5) SQLALLocStmt:为语句句柄分配内存, 并返回语句句柄(6) SQLExecDirect:把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问(7) SQLFetchAdvances:将游标移动到到查询结果集的下一行(或第一行)(8) SQLGetData :按照游标指向的位置,从查询结果集的特定的一列取回数据(9) SQLFreeStmt:释放与语句句柄相关的资源(10) SQLDisconnec

3、t:切断连接(11) SQLFreeConnect:释放与连接句柄相关的资源(12) SQLFreeEnv:释放与环境句柄相关的资源3. 实验环境操作系统:Microsoft Windows 7旗舰版 (32位)。硬件:容量足以满足MySQL 5.5安装及后续实验的使用。软件:数据库版本:MySQL 5.5 。 .MySQL官网下载的mysql-connector-odbc-5.1.11-win32.msi。4. 实验内容4.1. 以教科书第四章关于SQL语言相关内容为基础,课后查阅、自学ODBC接口有关内容,包括ODBC的体系结构、工作原理、数据访问过程、主要API接口的语法和使用方法等。4

4、.2. 以实验二建立的学生数据库为基础,编写 C语言(或其它支持ODBC接口的高级程序设计语言) 数据库应用程序,按照如下步骤访问数据库Step1. .ODBC初始化,为ODBC分配环境句柄Step2. 建立应用程序与ODBC数据源的连接Step3. 利用SQLExecDirect语句,实现数据库应用程序对数据库的建立、查询、修改、删除等操作Step4. 检索查询结果集Step5. 结束数据库应用程序5. 实验步骤5.1. ODBC配置5.1.1. 安装mysql-connector-odbc-5.1.11-win32.msi。在控制面板-管理工具-ODBC数据源管理器-驱动程序可以看到刚刚装

5、好的mysql驱动。5.1.2. 再转到系统DSN,点击“添加”,从“创建数据源”列表中选择刚安装的驱动。5.1.3. 填写数据源的相关配置信息,填好后点击“Test”进行测试,若successful则可以了。其中,Data Source Name:数据源名,自己取;Description: 数据源的描述,可不填;Server:服务器名称;User: 用户名,默认为root;Password:MySQL的密码,和每次进入MySQL输入的密码一致,而不是电脑的密码;Database: 数据库名。5.2. 实验代码#include#include#includewindows.h#includes

6、ql.h#includesqlext.h#includesqltypes.h #includeodbcinst.hstruct course_cell char cno5; char cname20; int lhour; int credit; char semester5;unsigned char sql_select=select * from db.course; /SQL查询语句 unsigned char sql_dolist3100=insert into db.course values(C27,internet,48,2,), update db.course set se

7、mester= where cno=C27, delete from db.course where cno=C27; /插入、修改、删除语句 unsigned char do_name310=insert,update,delete;void show_course(HDBC hdbc) /显示course的内容 HSTMT hstmt; RETCODE retcode; long lenOut1,lenOut2,lenOut3,lenOut4,lenOut5; struct course_cell* ccell; ccell = (struct course_cell*)malloc(si

8、zeof(struct course_cell); retcode=SQLAllocStmt(hdbc,&hstmt); if(retcode=SQL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) /SQLBindCol将应用程序的数据缓冲绑定到结果集的各列 retcode=SQLBindCol(hstmt,1,SQL_C_CHAR,ccell-cno,5,&lenOut1); retcode=SQLBindCol(hstmt,2,SQL_C_CHAR,ccell-cname,20,&lenOut2); retcode=SQLBindCol(hstmt,3,

9、SQL_C_SLONG,&ccell-lhour,sizeof(int),&lenOut3); retcode=SQLBindCol(hstmt,4,SQL_C_SLONG,&ccell-credit,sizeof(int),&lenOut4); retcode=SQLBindCol(hstmt,5,SQL_C_CHAR,ccell-semester,5,&lenOut5); retcode=SQLExecDirect(hstmt,sql_select,SQL_NTS); /把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问 if(retcode=SQL_SUCCESS | r

10、etcode=SQL_SUCCESS_WITH_INFO) printf(db.course is as following:n); printf(-n); printf(cno cname lhour credit semestern); retcode=SQLFetch(hstmt); /*SQLFetch fetches the next rowset of data from the result set and returns data for all bound columns.相当与SQLFetchAdvances和SQLGetData两个函数*/ while(retcode=S

11、QL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) printf(%-10s%-20s%-15d%-16d%-5sn, ccell-cno,ccell-cname,ccell-lhour,ccell-credit,ccell-semester); retcode=SQLFetch(hstmt); printf(-nn); SQLFreeStmt(hstmt,SQL_DROP);/释放语句句柄 int main() HENV env; /定义环境句柄 HDBC hdbc; /定义链接句柄 HSTMT hstmt; /定义语句句柄 RETCODE retcode

12、; retcode=SQLAllocEnv(&env); /初始化ODBC环境,返回环境句柄 if(retcode=SQL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) retcode=SQLAllocConnect(env,&hdbc); /为连接句柄分配内存并返回链接句柄 if(retcode=SQL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) retcode=SQLConnect(hdbc,(SQLCHAR*)test,SQL_NTS,(SQLCHAR*)root,SQL_NTS,(SQLCHAR*),SQL_NT

13、S); /连接一个SQL数据资料 if(retcode=SQL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) show_course(hdbc);/显示初始的course内容 for(int i=0; i3; i+)/依次执行插入、修改、删除操作 retcode=SQLAllocStmt(hdbc,&hstmt);/为语句句柄分配内存,并返回语句句柄 retcode=SQLExecDirect(hstmt,sql_dolisti,SQL_NTS); /把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问 printf(%s , do_namei

14、); if(retcode=SQL_SUCCESS | retcode=SQL_SUCCESS_WITH_INFO) printf(success!nn); else printf(fail!nn); SQLFreeStmt(hstmt,SQL_DROP); /释放与语句句柄相关的资源 show_course(hdbc);/显示操作后的新course内容 SQLDisconnect(hdbc); /切断连接 SQLFreeConnect(hdbc); /释放与连接句柄相关的资源 SQLFreeEnv(env); /释放与环境句柄相关的资源 return 0;6. 实验结果代码编写很顺利,第一次

15、出来的结果虽然执行成功,但是中文显示有问题。如下图部分截图所示,中文都是以?显示。后来我想起原理导入的是txt格式,不是sql。于是执行mysql -u root -p mysql course.sql重新导入所有的数据。这次出来的原数据显示没有问题,但是通过程序插入的中文显示还是乱码。插入的结果(可以看出多了一行internet)修改的结果(由于“冬”和“夏”都没法正常显示,所以从图上看不出区别)删除的结果(可以明显看出少了一行internet的课程)虽然图上部分显示还是有问题,而且课程名称cname的位数有部分缺,但是可以看得接口的操作已经取得成功。对于中文显示的问题,我之后还调试了数据源

16、配置Details的Character set,发现只有binary时才能较正常的显示上述内容,若是其他则还是一堆问号。总的来说实验目的达到,只是显示字符集出现小问题,还没有完全的得到解决。但实验总体上还是很顺利的。7. 实验小结实验中遇到的问题:这次实验进行比较顺利,只是按照实验要求逐步编程实现即可。实验中,发现1. 不需要SQLDriberConnect函数,也能顺利实现。我的理解是可能MySQL已经能自动连接数据资料,允许驱动器像用户询问信息。2. SQLFetchAdvances和SQLGetData函数其实只有用一个函数即可解决,即SQLFetch函数。3. 字符集的问题(详见6实验结果部分的说明)实验心得:通过这次实验,我了解了通用数据库应用编程接口ODBC的基本原理和实现机制,并对MySQL中的ODBC的使用和ODBC接口的语法和函数等有了进一步的了解。还通过在VC中编写C语言程序实现简单的数据库应用程序,较好地掌握基于ODBC的数据库访问的基本原理和方法,在实践中较好的掌握ODBC相关知识。总而言之,实验还是很简单的,但是却不可小看,只有在实践中在自己的编程实现中,才能真正地较好掌握ODBC。实践出真知就是这个道理。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁