在工做中,我老是使用編譯後sqlite3可執行程序,進行數據庫的建立;其實咱們操做sqlite數據庫,sql
也但是使用源代碼級別的形式去操做數據庫。我在網上查找,對部分代碼進行修改,添加上註釋,數據庫
形式以下代碼,其中包含對數據表的建立,添加數據,查詢數據功能,代碼以下:ubuntu
#include <stdio.h>函數
#include <sqlite3.h>sqlite
//查詢的回調函數聲明編譯器
int select_callback(void * data, int col_count, char ** col_values, char ** col_Name);回調函數
int main(int argc, char * argv[])it
{io
const char * sSQL1 = "create table users(userid varchar(20) PRIMARY KEY, age int, birthday datetime);";編譯
char * pErrMsg = 0;
int result = 0;
// 鏈接數據庫
sqlite3 * db = 0;
int ret = sqlite3_open("./test.db", &db);
if( ret != SQLITE_OK ) {
fprintf(stderr, "沒法打開數據庫: %s", sqlite3_errmsg(db));
return(1);
}
printf("數據庫鏈接成功!\n");
// 執行建表SQL
sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg );
if( ret != SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", pErrMsg);
sqlite3_free(pErrMsg);
}
// 執行插入記錄SQL
result = sqlite3_exec( db, "insert into users values('張三',20,'2011-7-23');", 0, 0, &pErrMsg);
if(result == SQLITE_OK){
printf("插入數據成功\n");
}
result = sqlite3_exec( db, "insert into users values('李四',20,'2012-9-20');", 0, 0, &pErrMsg);
if(result == SQLITE_OK){
printf("插入數據成功\n");
}
// 查詢數據表
printf("查詢數據庫內容\n");
sqlite3_exec( db, "select * from users;", select_callback, 0, &pErrMsg);
// 關閉數據庫
sqlite3_close(db);
db = 0;
printf("數據庫關閉成功!\n");
return 0;
}
int select_callback(void * data, int col_count, char ** col_values, char ** col_Name)
{
// 每條記錄回調一次該函數,有多少條就回調多少次
int i;
for( i=0; i < col_count; i++){
printf( "%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] );
}
return 0;
}
編寫好代碼後,咱們須要進行編譯。
我使用的ubuntu10.04自帶的gcc編譯器gcc4.4.3進行編譯。
若是你使用 $ gcc sqlitetest.c
進行編譯時,會出現以下的錯誤:
/tmp/ccyxvdme.o: In function `main':
sqlitetest.c:(.text+0x31): undefined reference to `sqlite3_open'
sqlitetest.c:(.text+0x48): undefined reference to `sqlite3_errmsg'
sqlitetest.c:(.text+0xa5): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0xd6): undefined reference to `sqlite3_free'
sqlitetest.c:(.text+0x102): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x12e): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x15a): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x166): undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
這是由於gcc找不到定義sqlite3_open等等的頭文件,通過在網上查找資料,
找到了解決方法,使用以下的方法進行編譯:
$ gcc -o hello -L /usr/local/sqlite-autoconf-3070400/lib -I/usr/local/sqlite-autoconf-307040/include sqlitetest.c -lsqlite3
上面的編譯主要意義時-L 代碼你安裝sqlite3類庫所在的路徑, -I表明安裝sqlite3的頭文件路徑 而-l表示
可執行程序的名稱
通過上面的編譯,便可成功。
執行結果以下:
~$ ./hello
數據庫鏈接成功!
插入數據成功
插入數據成功
查詢數據庫內容
userid = 張三
age = 20
birthday = 2011-7-23
userid = 李四
age = 20
birthday = 2012-9-20
數據庫關閉成功!