CGI如何用C控制SQLite3?

【问题描述】利用C编写CGI程序,如何控制SQLite3,进行基本的数据库操作?

【简介】

需要建立的变量

  1. sqlite3 *db;  
  2. int nrow = 0ncolumn = 0;  
  3. char **azResult = NULL;  
  4. char *zErrMsg = 0;  
  5.       
  6. char sql[500];  
  7. int rc = 0;  

需要包含的头文件

  1. #include <sqlite3.h>  

1 打开数据库(open)

  1. rc = sqlite3_open("test.db", &db);  
  2. if (rc)  
  3. {  
  4.     printf("Content-type: text/html\n\n");  
  5.     fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));  
  6.     sqlite3_close(db);  
  7.     return sql_errror();  
  8. }  

其中,sql_error()是自定义的函数。
2 关闭数据库(close)

  1. sqlite3_close(db);  

3 查(select)

  1. sprintf(sql,   
  2.     "select * from user where name='%s' AND passwd='%s'",   
  3.     username, passwd);    
  4.   
  5. rc = sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );  
  6. if (rc != SQLITE_OK)  
  7. {  
  8.     printf("Content-type: text/html\n\n");  
  9.     fprintf(stderr, "SQL error: %s\n", zErrMsg);  
  10.     sqlite3_close(db);  
  11.     return sql_errror();  
  12.  }  
  13.   
  14. if(*azResult != NULL)  
  15. {  
  16.     printf("Content-type: text/html\n\n");  
  17.     int i;  
  18.     for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )  
  19.         printf( "azResult[%d] = %s\n", i , azResult[i] );  
  20.     ...  
  21. }     

查询的结果保存在**azResult中,为nrow x ncolumn数组。

4 增(insert)

  1. sprintf(sql,   
  2.     "insert into user(name,passwd) values('%s','%s')",   
  3.     username,passwd);  
  4.   
  5. rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);  
  6. if (rc != SQLITE_OK)  
  7. {  
  8.     fprintf(stderr, "SQL1 error: %s\n", zErrMsg);  
  9.     return 1;  
  10. }  

回调函数(callback)

  1. static int callback(void *NotUsed, int argc, char **argv, char **azColName)  
  2. {  
  3.     int i = 0;  
  4.   
  5.     printf("Content-type: text/html\n\n");  
  6.     for (i=0; i<argc; i++)  
  7.     {      
  8.         printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");  
  9.     }  
  10.   
  11.     printf("\n");  
  12.     return 0;  
  13. }  

相关推荐