




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.实验一数据库接口实验一11.1实验目的.通过实验了解通用数据库应用编程接口ODBC的基本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;.利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的基本原理和方法.学习java语言,并采用jdbc接口方式对数据库进行访问1.2实验内容.以教科书第四章关于SQL语言相关内容为基础,课后查阅、自学ODBC接口有关内容,包括ODBC的体系结构、工作原理、数据访问过程、主要API接口的语法和使用方法等。.以实验二建立的学生数据库为基础,编写C语言(或其它支持ODBC接口的高级程序设计语言
2、)数据库应用程序,按照如下步骤访问数据库Stepl.ODBC初始化,为ODBC分配环境句柄Step2.建立应用程序与ODBC数据源的连接Step3.利用SQLExecDirect语句,实现数据库应用程序对数据库的建立、查询、修改、删除等操作Step4.检索查询结果集Step5.结束数据库应用程序1.3实验要求.要求所编写的数据库访问应用程序中使用到以下主要的ODBCAPI函数:SQLALLocEnv:初始化ODBC环境,返回环境句柄SQLALLocConnect:为连接句柄分配内存并返回连接句柄SQLConnect:连接一个SQL数据资源SQLDriverConnect连接一个SQL数据资源,
3、允许驱动器向用户询问信息SQLALLocStmt为语句句柄分配内存,并返回语句句柄SQLExecDirect把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问SQLFetchAdvances将游标移动到到查询结果集的下一行(或第一行)SQLGetData按照游标指向的位置,从查询结果集的特定的一列取回数据SQLFreeStmt释放与语句句柄相关的资源SQLDisconnect切断连接SQLFreeConnect释放与连接句柄相关的资源SQLFreeEnv释放与环境句柄相关的资源实验环境Mysql8.0版本数据库VS2015c+编程环境Window8操作系统ODBC5.3版本数据
4、库连接接口实验步骤资源配置环境配置ODBC下载可以在官网下载odbc驱动,!第仪1,5CtMisqLVJtirtbEnch-FiljlCoiiniKtcrsEnerEflXJBC*匚EflHrtimWQtCEEcWnQ匚EflH此雨FJidO.JSEnertwWfffintwirwrirEC1十注意32位与64位区别,相关bug将在下面提到。CGhnector/ODBCSeiectO产前即期就grmMlcrosDftWirdaMi网闻Wf州凡MSIIltKlBHjql-ctmacirr-ixibe-3Xi.11-wifTsb4.m;iWindiMK瓦胜皿事DP-AnimIxddngWrpmio
5、os釉hwainns?&A11sum11.3MMLS.adi|环境配置数据源配置1.打开控制面板,找到管理工具TouchPad殴Windows更新迎程序和功能学电源选项困工作文件完照冢庭安全蛙WindowsDefender画Windows移砂口心岂存储空间定位设置家底管理工具肝晋牧M4-苜木1的的理;Windows昉火塔产操作中心嚎电话和调制斛巡器比L恢复理,洋声.找至UODBC数据源,这里我用的是32位数据源。(因为我之前用的是ODBC8.0版本64位的,朝版在VS测试中连接失败,就换用了32位5.3版本)蛔突.最近访问的位置名梆修改日期类型iSCSI发起程序2013/8/2214:57快捷
6、厘氤OD日。数据源(32W2013/8/227:56快推E国ODBC本源(84仞2013/S/2214:55快捷京围:WindowsPowerShell(x86)2013/8/2223:34快捷厘叵,WindowsPowerShellISE(x86)2013/8/2214:55快捷E14lik-irlc.dirFlh-ik-L-ii_111T匚QiTI1/.EG4-tlta亡才筋控制面板卜所有控制面板项管理工具76打开用户数据源(U):名乔平台Fvt-slFilm。,6445MSAccessDatabase6415VisioDatabaseSamples64:lsr*=::-::15::-:;
7、*=::1snnrMicrosoftAccessDriver(*-mdb,.accdb)MicrosoftAccessDrk.TrCnndb“*.accdbj.找到我们安装的ODBC相关驱动程序,我安装的是5.3版本,选择相应驱动MySQLODBC5.3UncodeLrverSQLServer上一.这里需要填写对应的要连接的数据库信息,DataSourseName任意命名都可以,TCPServer使用本地,User是数据库用户的名称(可以打开workbench找到),Password是用户对应密码,Database会自动检测出该用户建立的数据库,我们只需要进行相应选择。MySQLConnect
8、or/ODBCDataSourceConfigurationConnector/ODBCConnectionParametersDataSourceMame:rxk.testDescription:Details:-TCP/IPServer:NamedPipe:User:Password:Dstabsse:OKCincelHelp.填写好之后可以点击Test按钮测试是否可以成功连接。如果不可以,就需要检查一下说数据库信息是否填写正确。TestResultTestConnectionSuccessfulDetails确定1TN皓斗成tl相应口*Rri冷麻木市印口前中E/1价融用IS特珅押立时村环
9、境配置ODBC和MYSQL选择上面可能出现的bug本次试验中这个问题困扰了我好久,起初我采用ODBC8.0和mysql8.0,由于都是64位,在VS中产生了DSN匹配错误,因此只能使用32位的低版本ODBC5.3。但是在使用时发现ODBC5.3版本不能识别MYSQL8.0版本数据库,在添加数据源中检测不到数据库。折腾了3个小时终于找到了问题所在,即8.0版本可之前版本的密码检测方式不同,因此在网上找到了相应的解决方法(修改数据库加密规则)。在MYSQL命令行中执行下列语句:ALTERUSERrootlocalhostIDENTIFIEDBYpasswordPASSWORDEXPIRENEVER
10、;#修改加密规则ALTERUSERrootlocalhostIDENTIFIEDWITHmysql_native_passwordBYpassword;#更新一下用户的密码FLUSHPRIVILEGES;#刷新权限再重置下密码:alteruserrootTocalhostidentifiedby123qwe;值MySQL8.0CommandLineClient-0mysqlALTERUSERJrootJ(?JlocalhostJIDENTIFIEDBYJpasswordJPASSWORDEXPIREHEUEfl;QueryOK,SrowsaffectedmysqlALTERUSERJpootJ
11、PJlocalhostJIDENTIFIEDUITHmjsql_natiue_passwordBJpa33woidf;QueryOK,SrowsaffectedmysqlFLUSHFfilUILEGES;QueryOK,QrowsaffectedmysqlalteruserJrootJ(?JlocalhostJidentifiedby*FU072312J;QueryOK,0rowsaffected最终,终于使得5.3版本可以成功连接8.0的mysql数据库了。环境配置一一VS属性设置1.字符集设置,将字符集的Unicode变为多字符集J0就*m常视目标平白Windows明斌vc+目录&C/C+
12、.ioB6Si卜百里工旦卜KML文档却物卜smisS.卜代码分析j目标邛色防本碎目最中间目至目标文件名目标文和r展舍锵幅机珠的扩展咨生成日志文件启用脂把盘生成顷郎瞅隹配触理MFC的使用氏1$(口1口6nDir)5(PlBtfarm)f(Cnnfigurjstianjl,t(Pldifonn)5(Configurdbon)i(PrajectNama.axe*uCdffxBchef-CbjfJlkf.ipdbfJobjf.refourcerJtlbf.tlirllhf.tmpf$0ntDirj(MuildPrajertName)Jg画富U匐知u对他的15晒例j否应用程序(卸卸使用标准闹nd口加用使
13、用弱字节字将柒VNET后标枢策战本能用Unicode字符美应用同自与用支持使用多字牯字粕茱中次蛔目双设凝承.资源库导入匿置tC):Debugv千包P):c酉喳属性常规潮成3目录卜c二十十-i清单工A附加包含目最.其他押L15ng指令调成信息格式便用Windows:西取消显示0动版揭K警4irtttifcSn-M-.ht=.Lib文件包的导入H算的值;埔出文件vc+m斐r。/匚I”:-.Libmysql.lib写入启用增量融取消显示启动版忸标志攫用尸重定向乙丽库百科C;PnogramF;|csMySQLMyQLServerB.Olib%(AdditionaiLibraryDirectaries)
14、PUjUUTWEJH-44Ihmysql.lib配置(。):Debug计算的值;lihmysql.lib%(AdditionalDependenciei)“平告旧:附tB蹄颁忽暗所有蝴库屏模决定双件图融黝口到建镭嵌久托音符效件强制符号引用延迟加戴的DLL1.6实验步骤代码分析SC存储结构structStu_Coursecharsno6;charcno4;intgrade;实验语句chartable_command4100=select*fromscwheresno=30201;,查询INSERTINTOscVALUE(30201,C01,80);”,插入updatescsetgrade=80w
15、heresno=30201andcno=C03;修改deletefromscwheresno=30201&cno=C01;/删除初始化ODBC,获取ODBC环境句柄HENVhEnv;SQLRETURNrEturn;/初始化ODBC环境,返回环境句柄rEturn=:SQLAllocEnv(&hEnv);与数据源ODBC建立连接分配连接句柄/分配连接句柄rEturn=:SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc);if(rEturn=SQL_SUCCESS)cout连接句柄分配成功!endl;elsecout连接句柄分配失败!endl;return-1;2.连
16、接数据源连接数据源rEturn=:SQLConnect(hDbc,(SQLCHAR*)Dsn,SQL_NTS,(SQLCHAR*)userId,SQL_NTS,(SQLCHAR*)userPw,SQL_NTS);if(rEturn=SQL_SUCCESS)cout数据源连接成功!endl;elsecout数据源连接失败!endl;return-1;1.6.5释放连接资源在应用程序完成数据库操作,退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的步骤如下:调用SQLFreeStmt函数释放语句句柄及其相关的系统资源。SQLFreeS
17、tmt(hstmt,SQL_DROP);/释放与语句句柄相关的资源调用SQLFreeConnect函数释放连接句柄及其相关的系统资源。SQLFreeConnect(hdbc);/释放与连接句柄相关的资源调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC操作。SQLFreeEnv(env);/释放与环境句柄相关的资源1.7实验步骤结果分析1.7.1执行查询操作Mysql代码:select*fromscwheresno=30201;功能:查询SC表中学号为30201的学生的选课情况.1C:UerslendvoJesktoptetDebgtest.exe环境句柄创建成功!连接句
18、柄分配成功!数据源连接成功!.1H911tl1al1al1al1al电1all1al地11al71al1Hl;J3j1iLtIL!,IIM/(曲b3i电bJji/Mjih11ali3hJji/ii11aBi131al电(111aMia11alstJj山事事,不不书事军军军军军事军军后军军需事军裔,军格IJJ1于f月仅嘉富审家军军基富军亭亭外奉亭喜军亭篇辜奉鬲亭亭军军某1.查询SC数据库2.插入数据库3.修改数据库4.删除数据5.退出名程345课COCOCO库据数CsIXI-I1-1询号202020-杳学3030301.7.2Mysql代码:INSERTINTOscVALUE(30201,C01
19、,80);功能:在学号为30201的学生的选课中添加课程号为C01的课程,并令其成绩为80分。1.7.3Mysql代码:updatescsetgrade=80wheresno=30201andcno=C03;功能:将学号为30201学号的学生的课程号为C03的选课成绩改为80分。修改数据库成绩C05CD1修改数据库修改迨句执行成功学号30201302013020130201删除数据删除暗句执行成功课程名C03杳询3c数据库2.插入数据库删除数据5.退出1.7.4Mysql代码:deletefromscwheresno=30201andcno=C01;功能:将学号为30201的学生的课程号为C0
20、1的选课删除。率耕*君本率本率*京本富牛本率梆年号名率率率才选择服务项目本字事率有本室章本梆看冷佛生率率军本室有卓富行率靠栈修改数据库4.删除数据删除数据删除语句执行成功数据库2,插入数据库查询录数据悚2插入数据库修改数据库4.删除数据5一退出1.8实验源代码#include#include#include#include#include#include#include#include#includeusingnamespacestd;定义ODBC连接的数据源信息#defineDSNrxk.test#defineIDroot#definePS”ru072312”/命令mysql代码charta
21、ble_command4100=select*fromscwheresno=30201;,查询INSERTINTOscVALUE(30201,C01,80);”,插入updatescsetgrade=80wheresno=30201andcno=C03;,/修改deletefromscwheresno=30201andcno=C01;/删除SC存储结构structStu_Coursecharsno6;charcno4;intgrade;voidquery_table(SQLHDBChDbc);查询表voidinsert_table(SQLHDBChDbc);插入表voidmodify_tabl
22、e(SQLHDBChDbc);修改表项voiddelete_table(SQLHDBChDbc);删除表项intmain(void)charDsn10=DSN,userId5=ID,userPw13=PS;连接信息HENVhEnv;SQLHDBChDbc;SQLRETURNrEturn;/初始化ODBC环境,返回环境句柄rEturn=:SQLAllocEnv(&hEnv);if(rEturn=SQL_SUCCESS)cout环境句柄创建成功!”endl;elsecout环境句柄创建失败!”endl;return-1;/分配连接句柄rEturn=:SQLAllocHandle(SQL_HANDL
23、E_DBC,hEnv,&hDbc);if(rEturn=SQL_SUCCESS)cout连接句柄分配成功!endl;elsecout连接句柄分配失败!”endl;return-1;连接数据源rEturn=:SQLConnect(hDbc,(SQLCHAR*)Dsn,SQL_NTS,(SQLCHAR*)userId,SQL_NTS,(SQLCHAR*)userPw,SQL_NTS);if(rEturn=SQL_SUCCESS)cout数据源连接成功!endl;elsecout数据源连接失败!”endl;return-1;intop=0;选择操作类型boolflag=true;判断是否退出whil
24、e(flag)cout*请选择服务项目*endl;cout1.查询sc数据库2.插入数据库3.修改数据库4.删除数据5.退出“op;switch(op)cout查询sc数据库endl;query_table(hDbc);break;cout插入数据库endl;insert_table(hDbc);query_table(hDbc);break;cout修改数据库endl;modify_table(hDbc);query_table(hDbc);cout删除数据endl;delete_table(hDbc);query_table(hDbc);break;cout退出endl;flag=fals
25、e;break;default:cout无效命令endl;break;if(SQLFreeConnect(hDbc)=SQL_SUCCESS)cout释放连接句柄资源成功!endl;if(SQLFreeEnv(hEnv)=SQL_SUCCESS)cout释放环境句柄资源成功!sno,6,&len1);SQLBindCol(hstmt,2,SQL_C_CHAR,aSC-cno,4,&len2);SQLBindCol(hstmt,3,SQL_C_SLONG,&aSC-grade,3,&len3);retcode=SQLExecDirect(hstmt,(SQLCHAR*)table_command
26、0,SQL_NTS);/查询操作执行if(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO)cout学号课程名成绩endl;retcode=SQLFetch(hstmt);依次取出缓冲区的内容while(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO)coutsnocnogradeendl;retcode=SQLFetch(hstmt);elsecout选择语句执行失败endl;elsecout句柄内存分配失败endl;释放资源SQLFreeStmt(hstmt,SQL_DROP);free(
27、aSC);voidinsert_table(SQLHDBChDbc)HSTMThstmt;RETCODEretcode;retcode=SQLAllocStmt(hDbc,&hstmt);/语句句柄分配if(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO)执行皿丫541插入操作retcode=SQLExecDirect(hstmt,(SQLCHAR*)table_command1,SQL_NTS);if(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO)cout执行插入语句成功endl;elsecout插入语句执行失败endl;elsecout句柄内存分配失败endl;释放资源SQLFreeStmt(hstmt,SQL_DROP);voidmodify_table(SQLHDBChDbc)HSTMThstmt;RETCODEretcode;retcode=SQLAllocStmt(hDbc,&hstmt);/语句句柄分配if(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO)执行mysql修改操作retcode=SQLExecDirect(hstmt,(SQLCHAR*)table_command2,SQL_NTS);if(ret
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 流动摊位车出租合同范本
- 网络项目分包合同协议书
- 网络科技项目合作协议书
- 防水维修质保协议书范本
- 聘用检验工作人员协议书
- 珠宝行业合作合同协议书
- 矿山整体承包合同协议书
- 防水彩钢瓦采购合同范本
- 牙椅转让合同协议书模板
- 研发项目委托开发协议书
- 武进区横山桥高级中学申报四星级高中自评报告
- RB/T 228-2023食品微生物定量检测的测量不确定度评估指南
- 常见输血不良反应的诊断及处理精讲课件
- JG-T 225-2020 预应力混凝土用金属波纹管
- 2024年俄罗斯湿纸巾和湿巾行业应用与市场潜力评估
- 正规挖机安全协议责任书
- 重庆发展投资公司及所属子企业招聘笔试真题2022
- 全屋定制直播间话术
- HG-T20678-2023《化工设备衬里钢壳设计标准》
- 工程项目部安全生产治本攻坚三年行动实施方案
- 胎儿宫内窘迫的护理
评论
0/150
提交评论