只记录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. MongoDB Linux下的安装和启动

    1. 下载MongoDB,此处下载的版本是:mongodb-linux-i686-1.8.1.tgz.tar. http://fastdl.mongodb.org/linux/mongodb-linu ...

  2. 批处理之SET命令

    除了 下面分别介绍: 表示第二个字符到倒数第三个字符的值

  3. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase

    sqlserver 插入数据的时候 插入失败,报错内容为 “SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, ...

  4. P2563 [AHOI2001]质数和分解

    题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如,9 的质数和表达式就有 ...

  5. [bzoj1062] [NOI2008]糖果雨

    Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果 ...

  6. C++的一些小操作、常用库及函数(持续更新)

    1. 强制保留n位小数(位数不足则强制补零) 头文件: #include <iomanip> 在输出前: cout<<setprecision(n); 也有不用头文件的方式,在 ...

  7. [bzoj] 2694 Lcm || 莫比乌斯反演

    原题 定义整数a,b,求所有满足条件的lcm(a,b)的和: 1<=a<=A 1<=b<=B ∀n>1,n2†gcd(a,b)(即任意n>1,\(n^2\)不是gc ...

  8. [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝

    A linked list is given such that each node contains an additional random pointer which could point t ...

  9. BZOJ2001 [Hnoi2010]City 城市建设 【CDQ分治 + kruskal】

    题目链接 BZOJ2001 题解 CDQ分治神题... 难想难写.. 比较朴素的思想是对于每个询问都求一遍\(BST\),这样做显然会爆 考虑一下时间都浪费在了什么地方 我们每次求\(BST\)实际上 ...

  10. Django请求原理

    总结一下: 1. 进来的请求转入/hello/. 2. Django通过在ROOT_URLCONF配置来决定根URLconf. 3. Django在URLconf中的所有URL模式中,查找第一个匹配/ ...