只记录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. WebSocket 与 HTTP/2

    个人笔记 WebSocket WebSocket 是一个双向通信协议,它在握手阶段采用 HTTP/1.1 协议(暂时不支持 HTTP/2). 握手过程如下: 首先客户端向服务端发起一个特殊的 HTTP ...

  2. flask - 1

    from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Worl ...

  3. DP入门(2)——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...

  4. edgeboxes proposal 和dpm 连接

    经过多天阅读文献和代码,我对edgeboxes 和 dpm的有了一定了解. 现在决定把它们简单地连接起来 也就是edgeboxes proposal 推荐窗口 然后 dpm去判断 但按照我理解的DPM ...

  5. 使用HashOperations操作redis

    方法 c参数 s说明 Long delete(H key, Object... hashKeys); H key:集合key Object... hashKeys:key对应hashkey  删除ma ...

  6. HTML文档插入JS代码的几种方法

    在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间. 2.放置在由< script>标签的src属性指定的外部文件中 ...

  7. thinkphp3.2 常用单字母函数

    U函数:用来生成url U('地址表达式',['参数'],['伪静态后缀'],['显示域名'] 例如: U('Blog/read?id=1') // 生成Blog控制器的read操作 并且id为1的U ...

  8. hdu 1133 Buy the Ticket (大数+递推)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. 理解NLP中的卷积神经网络(CNN)

    此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时 ...

  10. MySQL 服务器安装及命令使用

    本文来自实验楼相关部分的文档和实验操作过程. 一.MySQL简介 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,提高了速度并提高了灵活性.My ...