实验四数据库接口实验一1
实验目的
1.通过实验了解通用数据库应用编程接口ODBC的基本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;
2.利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的基本原理和方法
3.学习java语言,并采用jdbc接口方式对数据库进行访问
实验内容与步骤
1.以教科书第四章关于SQL语言相关内容为基础,课后查阅、自学ODBC接口有关内容,包括ODBC的体系结构、工作原理、数据访问过程、主要API接口的语法和使用方法等。
2.1.实验二建立的库为基础,编写C语言(或其它支持ODBC接口的高级程序设计语言)数据库应用程序,按照如下步骤访问数据库
(a)Step1.ODBC初始化,为ODBC分配环境句柄
(b)Step2.建立应用程序与ODBC数据源的连接
(c)Step3,利用SQLExecDirect语句,实现数据库应用程序对数据库的建立、查询、修改、删除等操作
(d)Step4.检索查询结果集
(e)Step5.结束数据库应用程序
实验要求
1.要求所编写的数据库访问应用程序中使用到以下主要的ODBCAPI函数:
(1)SQLALLocEnv:初始化ODBC环境,返回环境句柄
(2)SQLALLocConnect:为连接句柄分配内存并返回连接句柄
(3)SQLConnect:连接一个SQL数据资源
(4)SQLDriverConnect
连接一个SQL数据资源,允许驱动器向用户询问信息
(5)SQLALLocStmt
为语句句柄分配内存,并返回语句句柄
(6)SQLExecDirect
把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问
(7)SQLFetchAdvances
将游标移动到到查询结果集的下一行(或第一行)
(8)SQLGetData
按照游标指向的位置,从查询结果集的特定的一列取回数据
(9)SQLFreeStmt
释放与语句句柄相关的资源
(10)SQLDisconnect
切断连接
(11)SQLFreeConnect
释放与连接句柄相关的资源
(12)SQLFreeEnv
2.释放与环境句柄相关的资源
实验步骤
Stepl.ODBC初始化,为ODBC分配环境句柄
Step2.建立应用程序与ODBC数据源的连接
Step3.利用SQLExecDirect语句,实现数据库应用程序对数据库的建立、查询、修改、删除等操作
Step4.检索查询结果集
Step5.结束数据库应用程序
实验结果
首先查看course表中所有数据
口:笛梆大三下微握库法郅艮用exe
[pleaseinputthequai'y:select*fpomcout'se;hi编译原理?m秋悔2物塘年原理33春P03操作系统22秋C04JAUA程序设?22秋同5汗算机组成原22#pleaseinputthetjuari/:
在course中插入一个元组
pleaseinputthequary:
□.nsei'tintocolipseualites("C06Mdb2数据库sql语句,"compLitei''p,4,4J-;
pleaseinputthequapij:
select*fromcourse;
P01编译原理33秋
P02勒塘屋原理33春
P03同隹索统22秋
C04JAUA程序设?22秋
P05计算机组成原22卷
COGcomputer442
从course中删除一个元组
please | inputthe | quai'y: |
delete | fpomcoursewherecno='pC06'p; | |
please | inputthe | quary: |
select | *fromcourse; | |
P01编译原理33 | 秋 | |
阿2翱 | 苣房原理3 | 3春 |
P03操i | 豫统22 | 秋 |
C04JAUA程序设或 | i2ft | |
,酩计算机组成原3I3 | 22集 | |
从course表中简单查询
pleaseinputthequary:
select*ft'oncoursewherecredit=2;
P03操作系统22ft
C04JAUA程序设?22秋
P05计算机组成原22着
从student表中复杂查询
实验代码
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include"sql.h"
#include"sqltypes.h"
#include"sqlext.h"
#include"sqlucode.h"
#include"odbcinst.h"
#include<iostream>
#include<string>
usingnamespacestd;
RETCODEretcode;//结果返回集
SQLHDBChdbc;//定义链接句柄
voidSQL(string);//执行SQL语句子程序
intmain()
{
stringstr;
SQLHANDLEhenv;//定义环境句柄
unsignedcharSY[]="mysql";//ODBC数据源名称
unsignedchardb2[]="root";//用户名
unsignedcharpass[]="";//密码//分配ODBC环境
retcode=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(retcode==SQL_SUCCESS||retcode==SQL_SUCCESS_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,SY,SQL_NTS,db2,SQL_NTS,pass,SQL_NTS);〃链接
if(retcode==SQL_SUCCESS||retcode==SQL_SUCCESS_WITH_INFO)
{
while(1)
{
cout<<"pleaseinputthequary:"<<endl;
getline(cin,str);
if(str=="exit")return0;
SQL(str);
}
}
SQLFreeConnect(hdbc);////释放链接句柄
SQLFreeEnv(henv);//释放ODBC环境句柄
system("pause");
return0;
voidSQL(stringaaa)
{
charL1[50]={'\0'};charL2[50]={'\0'};charL3[50]={'\0'};charL4[50]={'\0'};char
L5[50]={'\0'};charL6[50]={'\0'};
longlenOut1,lenOut2,lenOut3,lenOut4,lenOut5,lenOut6;
SQLHSTMThstmt;//定义语句句柄
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//分配语义句柄if(retcode==SQL_SUCCESS)
{
retcode=SQLExecDirect(hstmt,(SQLCHAR*)(aaa.c_str()),SQL_NTS);
if(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,L4,sizeof(L4),&lenOut4);
retcode=SQLBindCol(hstmt,5,SQL_C_CHAR,L5,sizeof(L5),&lenOut5);
retcode=SQLBindCol(hstmt,6,SQL_C_CHAR,L6,sizeof(L6),&lenOut6);
//把所有捆绑过的数据字段的数据拷贝到相应的缓冲区
retcode=SQLFetch(hstmt);
while(retcode==SQL_SUCCESS||retcode==SQL_SUCCESS_WITH_INFO){
if(L2[0]=='\0')
cout<<(string)L1<<endl;
elseif(L3[0]=='\0')
cout<<(string)L1<<"\t"<<(string)L2<<endl;
elseif(L4[0]=='\0')
cout<<(string)L1<<""<<(string)L2<<""<<(string)L3<<endl;
elseif(L5[0]=='\0')
cout<<(string)L1<<""<<(string)L2<<""<<(string)L3<<"
"<<(string)L4<<endl;
elseif(L6[0]=='\0')
cout<<(string)L1<<""<<(string)L2<<""<<(string)L4<<""<<(string)L4<<""<<(string)L5<<endl;
else
cout<<(string)L1<<""<<(string)L2<<""<<(string)L4<<""<<(string)L4<<""<<(string)L5<<""<<(string)L6<<endl;
retcode=SQLFetch(hstmt);
}
}
}
SQLFreeStmt(hstmt,SQL_DROP);//释放语句句柄
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论