zoukankan      html  css  js  c++  java
  • 【SQL】使用调用层接口

    只记录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[15];
        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
    ", 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);
  • 相关阅读:
    Android MVP
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    前端开发利器webStorm /phpStorm
    CSS清除浮动方法集合
    14 JS基本语句
    12.8.8 可见与隐藏
    12.8 定位属性
    12.5 段落属性
    12.4 背景属性
  • 原文地址:https://www.cnblogs.com/dplearning/p/4899214.html
Copyright © 2011-2022 走看看