用C語言操做Sqlite數據庫

在工做中,我老是使用編譯後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

數據庫關閉成功!

相關文章
相關標籤/搜索