只记录C语言相关的,java相关的JDBC和PHP相关的都先跳过。

C相关的也只是记录一下,这里面的语句我都不知道如何运行,在我的vs2010里面连头文件都找不到... 我觉得这里只是讲解了一下基本的原理,具体的还跟我们采用哪一个数据库有关。

用C和SQL/CLI编写的程序能够创建和处理四种记录:

1.环境记录(SQLHENV):为连接做准备

2.连接记录(SQLHDBC):连接应用程序和数据库

3.语句记录(SQLHSTMT):SQL语句信息

4.描述记录(SQLHDESC):保存元组或参数的信息。一般不可见。

创建记录:

SQLAllocHandle(hType, hIn, hOut);

hType:表示希望的句柄类型。SQL_HANDLE_ENV表示新的环境;SQL_HANDLE_DBC表示新的连接;SWL_HANDLE_STMT表示新的语句。

hIn:是高层元素的句柄,如果要得到新的环境句柄则这里填入SQL_NULL_HANDLE

hOut:创建的句柄的地址

返回值:一个SQLRETURN(整数)类型的值。0表示成功,非0为出错。

#include "sqlcli.h"
SQLHENV myEnv;
SQLHDBC myCon;
SQLHSTMT execStat;
SQLRETURN errorCode1, errorCode2, errorCode3; errorCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);
if(!errorCode1)
{
errorCode2 = SQLAllocHandle(SQL_HANDLE_DBC, SQL_HANDLE_ENV, &myCon);
}
if(!errorCode2)
{
errorCode3 = SQLAllocHandle(SQL_HANDLE_STMT, SQL_HANDLE_DBC, &myCon);
}

进程语句

SQLPrepare(sh, st, sl);//作用是使句柄sh代表特定的SQL语句st

sh:语句句柄

st:SQL语句

sl:st的长度,如果不知道可以使用SQL_NTS通知SQLPrepare从字符串本身计算出长度。

SQLExecute(sh);  //执行句柄sh代表的语句

SQLPrepare(execStat, "SELECT netWorth FROM MovieExec",SQL_NTS);
SQLExecute(execStat);

上面两句代码可以合成一句:

SQLExecDirect(execStat, "SELECT netWorth FROM MovieExec", SQL_NTS);

从查询结果中取数据

与PSM中FETCH命令相当的函数是

SQLFetch(sh);

返回值是SQLRETURN类型,表明是否成功。

把分量绑定到宿主语言变量:

SQLBindCol(sh,colNo,colType,pVar,varSize,varInfo)

sh:语句的句柄

ColNo要获得的元素的值的(元组内)分量的数目

colType:代码,表示存放的分量值的变量类型。如SQL_CHAR、SQL_INTEGER

pVar:指针,存放值的变量

varSize:pVar指向的变量值的字节长度

varInfo:整型指针,用于提供输出值附加信息。

#include "sqlcli.h"
void worthRanges(){
int i, digits, counts[];
SQLHENV myEnv;
SQLHDBC myCon;
SQLHSTMT execStat;
SQLINTEGER worth, worthInfo; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);
SQLAllocHandle(SQL_HANDLE_DBC, SQL_HANDLE_ENV, &myCon);
SQLAllocHandle(SQL_HANDLE_STMT, SQL_HANDLE_DBC, &execStat);
SQLPrepare(execStat, "SELECT netWorth FROM MovieExec", SQL_NTS);
SQLExecute(execStat);
SQLBindCol(execStat, 1, SQL_INTEGER, &worth, sizeof(worth), &worthInfo);
for(i = 1; i < 15; i++)
counts[i] = 0;
while(SQLFetch(execStat) != SQL_NO_DATA)
{
digits = 1;
while((worth/=10) >0) digits++;
if(digits <= 14) counts[digits]++;
}
for(i = 1; i < 15; i++)
{
printf("digits = %d: number of execs = %d\n", i, counts[i]);
}
}

向查询传递参数:

1.用SQLPrepare准备语句,参数部分用问号代替

2.SQLBindParameter将值绑定到有问号的地方,有10个参数。

3.调用SQLExecute来执行带绑定的查询

SQLPrepare(myStat, "INSERT INTO Studio(name, address) VALUES(?, ?)", SQL_NTS);
SQLBindParameter(myStat,1, ..., studioName, ...);
SQLBindParameter(myStat,2, ..., studioAddr, ...);
SQLExecute(myStat);

【SQL】使用调用层接口的更多相关文章

  1. 【SQL】宿主语言接口

    一般情况下,SQL语句是嵌套在宿主语言(如C语言)中的.有两种嵌套方式: 1.调用层接口(CLI):提供一些库,库中的函数和方法实现SQL的调用 2.直接嵌套SQL:在代码中嵌套SQL语句,提交给预处 ...

  2. SQL调用WebService接口

    今天在做一个非常奇葩的东西.中间有个过程要在SQL触发器里面调用webservice接口.呵呵~ ALTER TRIGGER tgr_UpdateMemcached ON dbo.[User] AFT ...

  3. mapper.xml是怎样实现Dao层接口

    上午写了一个简单的 从xml读取信息实例化一个Bean对象.下午就开始想mybatis是怎么通过xml文件来实现dao层接口的,一开始想直接用Class.forName(String name)然后调 ...

  4. MyBatis框架的XML数据访问Dao层接口的组合使用

    MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...

  5. 利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF)

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十三)万能的用户层接口,(强大的WPF) 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt ...

  6. SQL映射器Mapper接口(MyBatis)

    SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现.直接把以前的dao接口定义成符合规则的Mapper. 注意事项: 1.接口必须以Mapper结尾,名字是Dom ...

  7. 远程调用内核接口(remote call kernel)

    -------------------------------------------------------------------------------- 标题: 远程调用内核接口(remote ...

  8. Linq to Sql:N层应用中的查询(上) : 返回自定义实体

    原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...

  9. Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询

    原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...

随机推荐

  1. HDU 4565 So Easy!(数学+矩阵快速幂)(2013 ACM-ICPC长沙赛区全国邀请赛)

    Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the cei ...

  2. 学习bash——变量

    一.什么是变量 变量:一个字眼,用来替代另一个比较复杂或者是容易变动的数据. 变量的优势:可变性.方便性 二.变量内容的设置 关键词:变量,变量名称,变量的内容(我默认将变量与变量名称等价) 方法:变 ...

  3. C++ 中神奇的头文件,懒人专用

    今天在做题的时候,偶然发现了一种神奇头文件.他的使用方法以及内容如下: #include <bits/stdc++.h> // C++ includes used for precompi ...

  4. beta版本冲刺五

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  5. 阿里云服务器 linux下载 jdk

    直接从本地下载包上传比较慢.直接在服务器上下载安装包: 1.进入orcle官网; 2.选择需要下载的版本,下载需要同意orcle协议, 3.点击下载,获取到下载请求的cookie, 复制所有cooki ...

  6. LTE QOS

    http://wenku.baidu.com/link?url=ziFIkdKaC7MU2RY-bTOp2bt87WFPw5_02bqmYs5W6w4ktOfPHEcWesK1U2T7YiyXjVSM ...

  7. sendto函数的坑

    测试unix数据报套接字时,一个程序收,一个程序发,分别绑定自己的socket.结果在收的部分,返回的发送方的地址总是空的,但是返回的地址长度又是对的. ) { bzero(&clientad ...

  8. BZOJ 3668:起床困难综合症(贪心)

    分析:按位贪心即可. program sleep; var a,g:..]of longint; n,i,m,ans,t,len,x,y,v:longint; c:char; s:string; e: ...

  9. 【bzoj2007】[Noi2010]海拔 最小割+对偶图+最短路

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个交 ...

  10. C#的23种设计模式概括

    创建型:         1. 单件模式(Singleton Pattern)         2. 抽象工厂(Abstract Factory)         3. 建造者模式(Builder) ...