SQL C 接口

来源:互联网 发布:吴峻申 上海 程序员 编辑:程序博客网 时间:2024/05/22 14:22
网站:www.sqlite.org
1、打开数据库:
     int sqlite3_open(
           const char *filename,  /*数据库名,可包含路径*/
           sqlite3 **ppDb             /*指向sqlite句柄的指针*/
     );
     成功返回0(宏定义为SQLITE_OK),失败返回错误码。
     数据库名存在就打开,不存在就创建并打开。
2、关闭数据库:
      int sqlite3_close(sqlite3* );
      成功关闭返回0,失败返回错误码,打开一个数据库记得要关闭。
3、出错判断:
      char *sqlite3_errmsg(sqlite3* );
4、执行sql操作
      int sqlite3_get_table(
            sqlite3 *db,           /*打开数据库的句柄*/
            const char *zSql,   /*sql语句*/
            char ***pazResult, /*指向sql执行结果的指针*/
            int *pnRow,           /*满足条件的记录的数目*/
            int *pnColumn,     /*每条记录包含的字段数目*/
            char **pzErrmsg    /*错误信息指针的地址*/
       );
       成功返回0,失败返回错误码。
       void sqlite3_free_table(char **result); /*释放存放记录的空间*/
5、执行sql操作:
      int sqlite3_exec(
            sqlite3 *,                                                     /*打开数据库句柄*/
            const char *sql,                                           /*sql语句*/
            int (*callback) (void *, int, char **, char **), /*执行函数*/      
            void *,                                                          /*函数的参数*/
            char **errmsg                                              /*错误信息指针的地址*/
       );
       成功返回0,失败返回错误码。
       执行函数:每找到一条自动执行一次函数
       typedef int (*sqlite3_callback) (
            void *para,      /*传递给函数的参数*/
            int f_num,       /*记录中包含字段的数目*/
            char **f_value, /*每个字段值的指针数组*/
            char **f_name  /*每个字段名称的指针数组*/
       );

------------------------------------------------------------------------------------
示例1:在数据库中创建一个表
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
   int i;
   for(i=0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
   }
   printf("\n");
   return 0;
}

int main(int argc, char* argv[])
{
   sqlite3 *db;
   char *zErrMsg = 0;
   int  rc;
   char *sql;

   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stdout, "Opened database successfully\n");
   }

   /* Create SQL statement */
   sql = "create table company("  \
            "id int primary key  not null," \
            "name              text  not null," \
            "age                  int   not null," \
            "address           char(50)," \
            "salary              real );";

   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
   fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   }else{
      fprintf(stdout, "Table created successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
---------------------------------------------------------------------------------
示例2:在创建的表中查询数据
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int main(int argc, char* argv[])
{
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;
   char **dbResult;
   int nRow, nColumn;
   int index = 0;
   int i, j;
   char *sql;

   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }

   /* Create SQL statement */
   sql = "select * from company;";

   /* Execute SQL statement */
   rc = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &zErrMsg);
   if( rc == SQLITE_OK ){
      printf("select %d number\n", nRow);
      for (i=0; i<nRow; i++) { 
          for(j=0; j<nColumn; j++) {
    printf("name:%s  value:%s", dbResult[j], dbResult[index]);      
          }
          printf("\n");
      }
   }
   sqlite3_free_table(dbResult);
   sqlite3_close(db);
   return 0;
}
0 0
原创粉丝点击