《2022年北邮大三数据库实验四数据库接口实验 .pdf》由会员分享,可在线阅读,更多相关《2022年北邮大三数据库实验四数据库接口实验 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验四数据库接口实验实验目的1 通过实验了解通用数据库应用编程接口ODBC 的基本原理和实现机制,熟悉主要的 ODBC接口的语法和使用方法;2利用 C 语言 (或其它支持ODBC 接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC 的数据库访问的基本原理和方法3学习 java 语言,并采用jdbc 接口方式对数据库进行访问实验内容与步骤1、 以教科书第四章关于SQL 语言相关内容为基础,课后查阅、 自学 ODBC 接口有关内容,包括 ODBC 的体系结构、工作原理、数据访问过程、主要API 接口的语法和使用方法等。2、以实验二建立的学生数据库为基础,编写C 语言 (或其它支
2、持ODBC 接口的高级程序设计语言 ) 数据库应用程序,按照如下步骤访问数据库(a)Step1. ODBC初始化,为ODBC分配环境句柄(b)Step2. 建立应用程序与ODBC数据源的连接(c)Step3. 利用 SQLExecDirect语句, 实现数据库应用程序对数据库的建立、查询、 修改、删除等操作(d)Step4. 检索查询结果集(e)Step5. 结束数据库应用程序3、要求所编写的数据库访问应用程序中使用到以下主要的ODBC API函数:(1)SQLALLocEnv :初始化ODBC 环境,返回环境句柄(2)SQLALLocConnect:为连接句柄分配内存并返回连接句柄(3)SQ
3、LConnect:连接一个SQL(4) SQLDriverConnect 连接一个 SQL数据资源,允许驱动器向用户询问信息(5) SQLALLocStmt 为语句句柄分配内存, (6) SQLExecDirect把 SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问(7) SQLFetchAdvances 将游标移动到到查询结果集的下一行( 或第一行 ) (8) SQLGetData 按照游标指向的位置,从查询结果集的特定的一列取回数据(9) SQLFreeStmt 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
4、 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 释放与语句句柄相关的资源(10) SQLDisconnect 切断连接(11) SQLFreeConnect 释放与连接句柄相关的资源(12) SQLFreeEnv 创建 ODBC数据源:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
5、 - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 实验代码:#include #include #include #include sql.h #include sqltypes.h #include sqlext.h RETCODE retcode;/ 结果返回集SQLHDBC hdbc;/ 定义链接句柄void print();/打印子程序void SQL(unsigned char);/执行 SQL语句子程序int main() SQLHANDLE henv; /定义环境句柄unsigned char SY=exp
6、eriment2;/ODBC数据源名称 unsigned char db2=localhost;/用户名 unsigned char pass= ;/密码 /分配 ODBC 环境名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if(retcode=SQL_SUCCESS|retcode=SQL_SUCC
7、ESS_WITH_INFO) /声明环境retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0); if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); /分配连接句柄if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) retcode=SQLConnect(hdbc
8、,SY,SQL_NTS,db2,SQL_NTS,pass,SQL_NTS);/链接if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) print(); unsigned char insert=insert into dbo.course values(C08,计 算 机 网 络,51,3,秋); SQL(insert); print(); unsigned char update=update dbo.course set credit=100 where course_name=计算机网络 ; SQL(update); p
9、rint(); unsigned char del=delete from dbo.course where course_name=计算机网络 ; SQL(del); print(); SQLFreeConnect(hdbc); /释放链接句柄SQLFreeEnv(henv); / 释放 ODBC 环境句柄system(pause); return 0; void print() unsigned char yuju=select * from dbo.course; SQLHSTMT hstmt;/ 定义语句句柄名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
10、- - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - char L120;char L220;char L320;char L420;char L520; long lenOut1,lenOut2,lenOut3,lenOut4,lenOut5; retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); /分配语句句柄if(retcode=SQL_SUCCESS) retcode=SQLExecDirect(hstmt,yuju,SQL_NTS); if(
11、retcode = SQL_SUCCESS|retcode = SQL_SUCCESS_WITH_INFO) / 将结果集中的属性列一一绑定至变量 retcode=SQLBindCol(hstmt,1,SQL_C_CHAR,L1,sizeof(L1),&lenOut1); retcode=SQLBindCol(hstmt,2,SQL_C_CHAR,L2,sizeof(L2),&lenOut2); retcode=SQLBindCol(hstmt,3,SQL_C_CHAR,L3,sizeof(L3),&lenOut3); retcode=SQLBindCol(hstmt,4,SQL_C_CHAR
12、,L4,sizeof(L4),&lenOut4); retcode=SQLBindCol(hstmt,5,SQL_C_CHAR,L5,sizeof(L5),&lenOut5); /把所有捆绑过的数据字段的数据拷贝到相应的缓冲区 retcode=SQLFetch(hstmt); while(retcode = SQL_SUCCESS|retcode = SQL_SUCCESS_WITH_INFO) printf(%st%st%st%st%sn,L1,L2,L3,L4,L5); /把所有捆绑过的数据字段的数据拷贝到相应的缓冲区retcode=SQLFetch(hstmt); SQLFreeStmt
13、(hstmt,SQL_DROP); void SQL(unsigned char aaa) printf(n%sn,aaa); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - SQLHSTMT hstmt;/定义语句句柄retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); /分配语义句柄if(retcode=SQL_SUCCESS) retcode=SQLExecDirec
14、t(hstmt,aaa,SQL_NTS); SQLFreeStmt(hstmt,SQL_DROP); /释放语句句柄 实验结果:1、插入一条记录:2、更新一条记录3、删除一条记录:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 实验总结:1、首先的问题是熟悉ODBC 是什么:一个基于ODBC 的应用程序对数据库的操作不依赖任何DBMS,不直接与 DBMS打交道,所有的数据库操作由对应的DBMS的ODBC 驱动程序完成。由此可见,
15、 ODBC的最大优点是能以统一的方式处理所有的数据库。ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性。2、在建立 ODBC 数据源的时候出了一些问题,测试不成功,后来把Server改成和数据库连接时的服务器相同,默认数据库是我要用的数据库时才可以测试成功。3、在编写代码时查了各个用到的ODBC API的用法,也参考了一些网上基于ODBC 访问数据库的方法和代码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -