一、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;
}