【問題描述】利用C編寫CGI程式,如何控制SQLite3,進行基本的資料庫操作?
【簡介】
需要建立的變數
- sqlite3 *db;
- int nrow = 0, ncolumn = 0;
- char **azResult = NULL;
- char *zErrMsg = 0;
-
- char sql[500];
- int rc = 0;
需要包含的標頭檔
- #include <sqlite3.h>
備忘:詳見搭建SQLite3嵌入式開發環境 (),安裝後,會產生一個sqlite3.h的檔案。
1 開啟資料庫(open)
- rc = sqlite3_open("test.db", &db);
- if (rc)
- {
- printf("Content-type: text/html\n\n");
- fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
- sqlite3_close(db);
- return sql_errror();
- }
其中,sql_error()是自訂的函數。
2 關閉資料庫(close)
- sqlite3_close(db);
3 查(select)
- sprintf(sql,
- "select * from user where name='%s' AND passwd='%s'",
- username, passwd);
-
- rc = sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
- if (rc != SQLITE_OK)
- {
- printf("Content-type: text/html\n\n");
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_close(db);
- return sql_errror();
- }
-
- if(*azResult != NULL)
- {
- printf("Content-type: text/html\n\n");
- int i;
- for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
- printf( "azResult[%d] = %s\n", i , azResult[i] );
- ...
- }
查詢的結果儲存在**azResult中,為nrow x ncolumn數組。
4 增(insert)
- sprintf(sql,
- "insert into user(name,passwd) values('%s','%s')",
- username,passwd);
-
- rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
- if (rc != SQLITE_OK)
- {
- fprintf(stderr, "SQL1 error: %s\n", zErrMsg);
- return 1;
- }
回呼函數(callback)
- static int callback(void *NotUsed, int argc, char **argv, char **azColName)
- {
- int i = 0;
-
- printf("Content-type: text/html\n\n");
- for (i=0; i<argc; i++)
- {
- printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
- }
-
- printf("\n");
- return 0;
- }