当先锋百科网

首页 1 2 3 4 5 6 7

一、sqlite3数据库的操作命令

数据库作为我们常用的一种存储方式,不仅管理起来比文件操作更为方便,也保证了数据的安全性。数据库的使用有以下两种方式,第一种进入数据库直接进行操作,第二种是在命令下操作。更为常用的是使用数据库的命令来操作数据库,操作起来也很方便。

下面我们就来讲讲如何使用数据的命令函数

1. 打开数据库 -- sqlite3_open

函数原型:int sqlite3_open(const char *fileName, sqlite3 **db);

函数参数:fileName --打开的数据库名称

                 db --数据库的句柄

头文件:#include <sqlite3.h>

函数返回值:成功返回SQLITE_OK,失败返回其它值。

2. 关闭数据库 -- sqlite3_close

函数原型:int sqlite3_close(sqlite3 *db);

函数参数:db --数据库的句柄

头文件:#include <sqlite3.h>

返回值:执行成功返回SQLITE_OK,否则返回其它值。

3. 调试数据库 -- sqlite3_errmsg

函数原型:const char *sqlite3_errmsg(sqlite3 *db);

函数参数:db --数据库的句柄

头文件:#include <sqlite3.h>

返回值:错误说明的字符串指针。

4. 调试数据库

函数原型:int sqlite3_errcode(sqlite3 *db);

函数参数:db --数据库的句柄

头文件:#include <sqlite3.h>

返回值:错误代码。

5. 执行SQL语句 -- sqlite3_exec

函数原型:int sqlite3_exec(sqlite3 *db, const char *sql, sqlite_callback callback, void *para, char **errMsg);

函数参数:db --数据库的句柄

                  sql --执行的SQL语句

                  callback --回调函数

                  para --用户传入的参数

                  errMsg --出错信息

头文件:#include <sqlite3.h>

返回值:执行成功返回SQLITE_OK,否则返回其它值。

6. 回调函数 -- callback

函数原型:typedef int (*sqlite_callback)(void *para, int columnCount, char **columnValue, char **columnName);

函数参数:para --传入的参数

                  columnCount --查询的列数

                  columnValue --查询的字段值

                  columnName --查询的字段名

7. 查询SQL -- sqlite3_get_table

函数原型:int sqlite3_get_table(sqlite3 *db, const char *sql, char ***pResult, int *rowCount, int *columnCount, char **errMsg);

函数参数:db --数据库的句柄

                  sql --执行的SQL语句

                  pResult --查询结果集

                  rowCount --结果集的行数

                  columnCount --结果集的列数

                  errMsg --保存的出错信息

头文件:#include <sqlite3.h>

返回值:执行成功返回SQLITE_OK,否则返回其他值。

8. 注销结果集 -- sqlite3_free_table

函数原型:void sqlite3_free_table(char **result);

函数参数:result --结果集

头文件:#include <sqlite3.h>

返回值:无

二、参考代码

/*****************************************************
File name:数据库的操作
Author:Zhengqijun    Version:1.0    Date: 2016/11/07
Description:数据库的基本操作命令
Funcion List: 
*****************************************************/

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>

void create_table(sqlite3 *db)
{
    char *sql;
    char *errmsg;
    int ret;

    sql = "create table if not exists mytable (id integer primary key,name text);";

    ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);

    if(ret != SQLITE_OK)
    {
        printf("create table error : %s\n",errmsg);
        exit(-1);
    }
}

void insert_record(sqlite3 *db)
{
    char sql[100];
    char *errmsg;
    int ret;
    int id;
    char name[20];

    printf("please input id and name:\n");
    scanf("%d%s",&id,name);

    sprintf(sql,"insert into mytable (id,name)values(%d,'%s');",id,name);
    
    ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert record  error : %s\n",errmsg);
        exit(-1);
    }
#if 0	
    sql = "insert into mytable (id,name)values(NULL,'zhang');";

    ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert record  error : %s\n",errmsg);
        exit(-1);
    }
	
    sql = "insert into mytable (id,name)values(NULL,'lin');";

    ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert record  error : %s\n",errmsg);
        exit(-1);
    }
#endif
}

int displaycb(void *para,int ncolumn,char ** columnvalue,char *columnname[])
{
    int i;
    
    printf("total column is %d\n",ncolumn);

    for(i = 0;i < ncolumn; i++)
    {
        printf("col_name:%s----> clo_value:%s\n",columnname[i],columnvalue[i]);
    }
    printf("===========================\n");
 
    return 0;
}

void inquire_usecb(sqlite3 * db)
{
    char *sql;
    char *errmsg;
    int ret;

    sql = "select * from mytable;";

    ret = sqlite3_exec(db,sql,displaycb,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("select error : %s\n",errmsg);
        exit(-1);
    }

}

void inquire_nocb(sqlite3 *db)
{
    int nrow,ncolumn;
    char **azresult;
    char *sql;
    char *errmsg;
    int ret;
    int i;

    sql = "select * from mytable;";

    ret = sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("get table error:%s",errmsg);
        exit(-1);
    }

    printf("nrow = %d,column = %d\n",nrow,ncolumn);

    sqlite3_free_table(azresult);
}

int main()
{
    sqlite3 *db;
    int ret;

    ret = sqlite3_open("mydatabase.db",&db);
    if(ret != SQLITE_OK)
    {
        printf("open database error : %s\n",sqlite3_errmsg(db));
        exit(-1);
    }
    else
    {
        printf("you have opened a database succefully!\n");
    }

    create_table(db);
    insert_record(db);
    //inquire_usecb(db);
    inquire_nocb(db);

    sqlite3_close(db);
	
    return 0;
}