亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQLite > 正文

SQLITE3 使用總結(2)

2024-09-07 00:09:54
字體:
來源:轉載
供稿:網友

(2) SQL語句操作
本節介紹如何用sqlite 執行標準 sql 語法。

i.1 執行sql語句
int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg );

這就是執行一條 sql 語句的函數。

第1個參數不再說了,是前面open函數得到的指針。說了是關鍵數據結構。

第2個參數const char *sql 是一條 sql 語句,以/0結尾。

第3個參數sqlite3_callback 是回調,當這條語句執行之后,sqlite3會去調用你提供的這個函數。(什么是回調函數,自己找別的資料學習)

第4個參數void * 是你所提供的指針,你可以傳遞任何一個指針參數到這里,這個參數最終會傳到回調函數里面,如果不需要傳遞指針給回調函數,可以填NULL。等下我們再看回調函數的寫法,以及這個參數的使用。

第5個參數char ** errmsg 是錯誤信息。注意是指針的指針。sqlite3里面有很多固定的錯誤信息。執行 sqlite3_exec 之后,執行失敗時可以查閱這個指針(直接 printf(“%s/n”,errmsg))得到一串字符串信息,這串信息告訴你錯在什么地方。sqlite3_exec函數通過修改你傳入的指針的指針,把你提供的指針指向錯誤提示信息,這樣sqlite3_exec函數外面就可以通過這個 char*得到具體錯誤提示。

說明:通常,sqlite3_callback 和它后面的 void * 這兩個位置都可以填 NULL。填NULL表示你不需要回調。比如你做 insert 操作,做 delete 操作,就沒有必要使用回調。而當你做 select 時,就要使用回調,因為 sqlite3 把數據查出來,得通過回調告訴你查出了什么數據。

i.2 exec 的回調

typedef int (*sqlite3_callback)(void*,int,char**, char**);

你的回調函數必須定義成上面這個函數的類型。下面給個簡單的例子:

//sqlite3的回調函數
// sqlite 每查到一條記錄,就調用一次這個回調
int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
{
//para是你在 sqlite3_exec 里傳入的 void * 參數
//通過para參數,你可以傳入一些特殊的指針(比如類指針、結構指針),然后在這里面強制轉換成對應的類型(這里面是void*類型,必須強制轉換成你的類型才可用)。然后操作這些數據
//n_column是這一條記錄有多少個字段 (即這條記錄有多少列)
// char ** column_value 是個關鍵值,查出來的數據都保存在這里,它實際上是個1維數組(不要以為是2維數組),每一個元素都是一個 char * 值,是一個字段內容(用字符串來表示,以/0結尾)
//char ** column_name 跟 column_value是對應的,表示這個字段的字段名稱
//這里,我不使用 para 參數。忽略它的存在.
int i;
printf( “記錄包含 %d 個字段/n”, n_column );
for( i = 0 ; i < n_column; i ++ )
{
printf( “字段名:%s ß> 字段值:%s/n”, column_name[i], column_value[i] );
}
printf( “------------------/n“ );
return 0;
}
int main( int , char ** )
{
sqlite3 * db;
int result;
char * errmsg = NULL;
result = sqlite3_open( “c://Dcg_database.db”, &db );
if( result != SQLITE_OK )
{
//數據庫打開失敗
return -1;
}

//數據庫操作代碼
//創建一個測試表,表名叫 MyTable_1,有2個字段: ID 和 name。其中ID是一個自動增加的類型,以后insert時可以不去指定這個字段,它會自己從0開始增加
result = sqlite3_exec( db, “create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) )”, NULL, NULL, errmsg );
if(result != SQLITE_OK )
{
printf( “創建表失敗,錯誤碼:%d,錯誤原因:%s/n”, result, errmsg );
}

//插入一些記錄
result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( ‘走路’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入記錄失敗,錯誤碼:%d,錯誤原因:%s/n”, result, errmsg );
}
result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( ‘騎單車’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入記錄失敗,錯誤碼:%d,錯誤原因:%s/n”, result, errmsg );
}
result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( ‘坐汽車’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入記錄失敗,錯誤碼:%d,錯誤原因:%s/n”, result, errmsg );
}

//開始查詢數據庫
result = sqlite3_exec( db, “select * from MyTable_1”, LoadMyInfo, NULL, errmsg );

//關閉數據庫
sqlite3_close( db );
return 0;
}

通過上面的例子,應該可以知道如何打開一個數據庫,如何做數據庫基本操作。

有這些知識,基本上可以應付很多數據庫操作了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久人成| 美女999久久久精品视频| 精品国产网站地址| 九九精品在线视频| 另类专区欧美制服同性| 久久国产精品久久久久久久久久| 美女视频黄免费的亚洲男人天堂| 亚洲视频欧美视频| 午夜免费久久久久| 伊人久久免费视频| 中文字幕在线视频日韩| 久久影视电视剧免费网站| 国产一区二区三区高清在线观看| 啪一啪鲁一鲁2019在线视频| 亚洲缚视频在线观看| 亚洲精品日韩av| 日韩大胆人体377p| 亚洲成人国产精品| 97精品伊人久久久大香线蕉| 国产成人av在线播放| 欧美精品情趣视频| 国产精品久久久久久久久久久久| 日韩av电影在线免费播放| 国产精品综合网站| 亚洲欧洲高清在线| 欧美日本亚洲视频| 国产精品视频色| 亚洲男人天堂久| 日韩精品免费在线| 亚洲精品aⅴ中文字幕乱码| 久久香蕉国产线看观看网| 国产日韩欧美在线看| 91亚洲精品久久久久久久久久久久| 久久精彩免费视频| 免费av在线一区| 精品亚洲精品福利线在观看| 97精品一区二区三区| 26uuu另类亚洲欧美日本一| 日韩欧美极品在线观看| 亚洲欧美国产高清va在线播| 欧美人与性动交| 中文字幕亚洲欧美日韩2019| 欧美激情xxxxx| 精品亚洲一区二区三区在线观看| 日本一区二区在线免费播放| 欧美性猛交xxxx免费看久久久| 亚洲一级黄色片| 久久久久久久久久久网站| 久久久久久久久亚洲| 欧美性高潮床叫视频| 日本韩国欧美精品大片卡二| 国产一区二区三区欧美| 久久久久久高潮国产精品视| 久久亚洲国产精品| 操人视频在线观看欧美| 日韩欧美高清在线视频| 欧美成人免费小视频| 国产视频精品一区二区三区| 欧美激情二区三区| 日本高清视频精品| 精品久久久久久久久久ntr影视| 日韩av中文字幕在线播放| 欧美日韩一区二区三区在线免费观看| 日韩精品中文字幕在线播放| 九九九久久国产免费| 国产日韩av高清| 国产精品久久久久久久久久久不卡| 亚洲综合在线做性| 久久精品成人欧美大片古装| 亚洲tv在线观看| 日韩精品极品在线观看| 欧美日韩xxxxx| 亚洲女人天堂色在线7777| 另类美女黄大片| 国产在线精品成人一区二区三区| 亚洲韩国青草视频| 欲色天天网综合久久| 91精品国产高清自在线| 欧美丰满片xxx777| 欧美激情精品久久久久久蜜臀| 久久躁日日躁aaaaxxxx| 久久精品一本久久99精品| 欧美成人sm免费视频| 麻豆乱码国产一区二区三区| 一区二区三区四区精品| 国产精品嫩草影院一区二区| 欧美一区二区.| 国产日韩精品综合网站| 久久精品电影网站| 欧美激情一区二区三级高清视频| 亚洲精品中文字幕女同| 精品久久久久久中文字幕| 大荫蒂欧美视频另类xxxx| 在线视频欧美日韩| 亚洲自拍av在线| 欧美亚洲视频在线观看| 在线视频日韩精品| 一区二区三区四区精品| 日韩精品中文字幕在线播放| 欧美高跟鞋交xxxxxhd| 欧美劲爆第一页| 成人av色在线观看| 亚洲成人激情在线| 国产91精品视频在线观看| 久久av在线看| 丝袜一区二区三区| 久久影视电视剧免费网站| 国产精品久久久久久久av电影| 欧美一区二区大胆人体摄影专业网站| 成人午夜小视频| 欧美日韩中文在线| 欧美精品videos另类日本| 狠狠色香婷婷久久亚洲精品| 中文字幕亚洲一区二区三区五十路| 麻豆一区二区在线观看| 亚洲一区美女视频在线观看免费| 久久久国产影院| 不卡伊人av在线播放| 国产中文字幕亚洲| 国产精品久久久久久av下载红粉| 欧美老女人www| 国内成人精品一区| 欧美另类交人妖| 日韩av综合网| 98午夜经典影视| 国产精品青草久久久久福利99| 538国产精品视频一区二区| 中国人与牲禽动交精品| 国产精品福利网站| 亚洲一区二区免费在线| 欧美成人三级视频网站| 久久青草精品视频免费观看| 欧美日韩一二三四五区| 亚洲精品久久久久久久久久久久| 欧美日韩一区二区免费在线观看| 欧美日韩在线第一页| 91精品国产91久久久| 福利一区福利二区微拍刺激| 成年人精品视频| 亚洲第一页中文字幕| 久久精品99国产精品酒店日本| 日韩毛片在线观看| 视频在线观看99| 日本久久久a级免费| 国产一区二区三区中文| 久久久久在线观看| 久久久综合av| 中文字幕日本欧美| 精品久久久久久久久久久久久久| 色777狠狠综合秋免鲁丝| 欧美一级大片在线免费观看| 日韩视频中文字幕| 亚洲天堂av女优| 精品久久久久久久久久久久| 中文日韩在线观看| 欧美一级大片在线免费观看| 91在线观看免费网站| 国产福利成人在线| 久久综合久中文字幕青草| 美女啪啪无遮挡免费久久网站| 久久乐国产精品| 青青草成人在线| 久久青草福利网站| 国产精品第8页|