sqlite3数据库简单使用demo
demo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "evsql/sqlite3.h"
struct test_t{
char * username;
int password;
};
int print_record(void *params,int n_column,char **column_value,char **column_name)
{
int i;
/*传入的参数即为回调函数第一个参数params*/
struct test_t *test = params;
/*打印出搜索到的数据,数据均以字符串形式存入column_value中*/
for(i=0;i<n_column;i++){
printf(" %s",column_value[i]);
}
printf("
");
/*搜索到的数据个数存入n_column中*/
if(n_column )
{
int password = atoi(column_value[1]);
/*传入数据与表中搜索到数据相同,代表成功*/
if(strcmp(column_value[0],test->username) == 0 && password == test->password)
printf("success.....
");
}
return 0;
}
int main()
{
const char *sql_create_table="create table t(user_id int primary key,username varchar(128) ,time int)";
char *errmsg = 0;
int ret = 0;
struct test_t test;
test.username = "sky";
test.password = 152100;
sqlite3 *db = 0;
/*读写打开一个数据库文件,无此文件打开失败*/
ret = sqlite3_open_v2("./sky.db",&db,SQLITE_OPEN_READWRITE,NULL);
if(ret != SQLITE_OK){
/*无此文件,创建一个文件*/
ret = sqlite3_open("./sky.db",&db);
if(ret != SQLITE_OK){
fprintf(stderr,"Cannot open db: %s
",sqlite3_errmsg(db));
}
/*创建一个表*/
ret = sqlite3_exec(db,sql_create_table,NULL,NULL,&errmsg);
if(ret != SQLITE_OK){
fprintf(stderr,"create table fail: %s
",errmsg);
}
}
printf("Open database
");
char sql[1024];
char *user_name = "sky";
sprintf(sql,"select username,time from t where user_id=%d;",2);
/*在表中插入数据*/
ret = sqlite3_exec(db,"insert into t(user_id,username,time) values(1,bboy,151900);insert into t(user_id,username,time)
values(2,sky,152100)",NULL,NULL,&errmsg);
printf("Insert a record %s
",ret == SQLITE_OK ? "OK":"FAIL");
/*更新表中数据*/
ret = sqlite3_exec(db,"update t set username=born where user_id=1",NULL,NULL,&errmsg);
printf("Update a record %s
",ret == SQLITE_OK ? "OK":"FAIL");
/*查找表中数据,调用回调函数print_record,将test结构体传入回调函数*/
ret = sqlite3_exec(db,sql,print_record,&test,&errmsg);
if(ret != SQLITE_OK){
fprintf(stderr,"query SQL error: %s
",errmsg);
}
sqlite3_free(errmsg);
sqlite3_close(db);
printf("Close database
");
return 0;
}
CMakeLists.txt文件(源程序文件目录): cmake_minimum_required(VERSION 2.8)
project(sqlite_test) set(CMAKE_BUILD_TYPE “Debug”) aux_source_directory(. DIR_SRCS) add_definitions(-DGOGENIUS_DEBUG)
add_subdirectory(evsql)
add_executable(sqlite_test ${DIR_SRCS})
target_link_libraries(sqlite_test evsqlfunc) target_link_libraries(sqlite_test pthread) target_link_libraries(sqlite_test dl)
INSTALL(TARGETS sqlite_test DESTINATION bin)
CMakeLists.txt文件(源程序文件目录下的sqlite3文件目录中): aux_source_directory(. DIR_LIB_SRCS) add_library(evsqlfunc ${DIR_LIB_SRCS})
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
三轴加速度传感器角度值转换原理
