日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【SQL】使用调用层接口

發布時間:2025/5/22 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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\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】使用调用层接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。