sqlite嵌入式数据库C语言基本操作(1)
2016-12-04 20:25
495 查看
sqlite嵌入式数据库C语言基本操作(1)
C语言的API函数列表见官网SQLite C Interface.这里对一些基本的函数做一个简单的说明。
sqlite3_open: 打开数据库文件.
sqlite3_close: 关闭数据库。
sqlite3_prepare : 编译SQL,准备语句。
sqlite3_step: sqlite3_stmt的方式执行SQL语句。
sqlite3_exec: 执行SQL语句。
sqlite3_finalize: 释放 sqlite3_stmt资源。
sqlite3_bind_int: 绑定SQL语句中int参数。
sqlite3_bind_text: 绑定SQL语句中的字符串参数。
sqlite3_bind_blob: 绑定SQL语句中的二进制参数。
sqlite3_column_int: 遍历数据集,得到一行数据中某列的int值。
sqlite3_column_text: 遍历数据集,得到一行数据某列的字符串值。
sqlite3_column_blob: 遍历数据集,得到一行数据某列的二进制值。
……
以下这个例子做一个简单的insert,和 select 的例子,来讲sqlite3数据库的简单数据操作。
首先建一张简单的表,并插入初始化数据。
建立对应的数据模型.
得到所有Users的函数
insert操作函数:
测试代码:
输出
count:4
userid:1 username:Alex
userid:2 username:Allan
userid:3 username:Blizzard
userid:4 username:Bob
ret = 1
count:5
userid:1 username:Alex
userid:2 username:Allan
userid:3 username:Blizzard
userid:4 username:Bob
userid:5 username:micheal
gcc编译最后记得加上 -lsqlite3
本文只是很初略的介绍了sqlite嵌入式数据库的基本操作,初略到甚至例程只讲了两个操作,增加和查询,修改和删除都没有讲到,不过看了增加操作,修改和删除操作就很容易实现了。
写这篇文章目的只是一个想讲一个过程,一个操作数据库的基本过程
2 编译准备SQL语句
3 绑定SQL语句参数
4 执行SQL语句
5 关闭释放Statement
6 关闭数据库
当然也只是一个初略的流程,对于数据库操作失败的流程处理也没有。不过了解上面这个初略的流程就可以了。更深入的讲解请参见下篇:[sqlite嵌入式数据库C语言基本操作(2)]
参考文献:
sqlite官方网站:sqlite.org
generated by haroopad
sqlite嵌入式数据库C语言基本操作(1)
sqlite是应用最广泛的嵌入式数据库,没有之一,其详细的介绍参见官方网站(http://sqlite.org).最新的版本是3.12.2.C语言的API函数列表见官网SQLite C Interface.这里对一些基本的函数做一个简单的说明。
sqlite3_open: 打开数据库文件.
sqlite3_close: 关闭数据库。
sqlite3_prepare : 编译SQL,准备语句。
sqlite3_step: sqlite3_stmt的方式执行SQL语句。
sqlite3_exec: 执行SQL语句。
sqlite3_finalize: 释放 sqlite3_stmt资源。
sqlite3_bind_int: 绑定SQL语句中int参数。
sqlite3_bind_text: 绑定SQL语句中的字符串参数。
sqlite3_bind_blob: 绑定SQL语句中的二进制参数。
sqlite3_column_int: 遍历数据集,得到一行数据中某列的int值。
sqlite3_column_text: 遍历数据集,得到一行数据某列的字符串值。
sqlite3_column_blob: 遍历数据集,得到一行数据某列的二进制值。
……
以下这个例子做一个简单的insert,和 select 的例子,来讲sqlite3数据库的简单数据操作。
首先建一张简单的表,并插入初始化数据。
create table userinfo ( userid integer, username char(32), PRIMARY KEY (userid) ); insert into userinfo (userid,username) values (1,"Alex"); insert into userinfo (userid,username) values (2,"Allan"); insert into userinfo (userid,username) values (3,"Blizzard"); insert into userinfo (userid,username) values (4,"Bob");
建立对应的数据模型.
typedef struct userinfo_s { int userid; //用户编号 char username[33]; //用户姓名 struct userinfo_s * next; //下一个用户 } userinfo_t;
得到所有Users的函数
int get_all_userinfos(userinfo_t u){ char sql[512] = "select * from userinfo;"; //sql语句 sqlite3 * db = NULL; sqlite3_stmt * stmt = NULL; int ret_open = sqlite3_open("test.db",&db); //打开数据库文件 if (ret_open != SQLITE_OK){ printf("open test.db fail\n"); return -1; } int ret = sqlite3_prepare(db,sql,-1,&stmt,NULL); //准备好SQL语句 if (ret != SQLITE_OK){ printf("prepare fail \n"); return ret; } ret = sqlite3_step(stmt); //执行SQL int count = 0; if(ret != SQLITE_ROW){ //返回有数据 return 0; }else{ userinfo_t * p = u; //建立链表 do{ userinfo_t * user = calloc(sizeof(userinfo_t),1); user->userid = sqlite3_column_int(stmt,0); //得到USerid 注意get的初始值为index为0 const char * name = sqlite3_column_text(stmt,1); //得到用户名 if (name){ int len = strlen(name); strncpy(user->username,name,len); } user->next = NULL; p->next = user; //串联 建立一个单项链表 p = p->next; count ++; }while((ret = sqlite3_step(stmt))==SQLITE_ROW); //取值下一个 } sqlite3_finalize(stmt); //释放资源 stmt sqlite3_close(db); //关闭数据库句柄 return count; }
insert操作函数:
int insert_userinfo_t(userinfo_t * u){ char sql[512] = "insert into userinfo (userid,username) values (?,?)"; //插入数据库语句 sqlite3 *db = NULL; sqlite3_stmt * stmt = NULL; int ret_open = sqlite3_open("test.db",&db); //打开数据库 if(ret_open !=SQLITE_OK){ printf("open test.db fail\n"); return -1; } int ret = sqlite3_prepare(db,sql,-1,&stmt,NULL); //准备语句 if (ret != SQLITE_OK){ printf("prepare fail \n"); return ret; } sqlite3_bind_int(stmt,1,u->userid); //绑定参数, 注意绑定参数的初始index值为1 sqlite3_bind_text(stmt,2,u->username,32,NULL); ret = sqlite3_step(stmt); //执行语句 if(ret == SQLITE_DONE){ //执行结果 ret = SQLITE_OK; } sqlite3_finalize(stmt); //释放资源 sqlite3_close(db); //关闭数据库 return ret; }
测试代码:
void test_get_all_userinfos(){ userinfo_t u; int count = get_all_userinfos(&u); userinfo_t * p = u.next; userinfo_t * q = p; printf("count:%d\n",count); while(p){ printf("userid:%d username:%s \n",p->userid,p->username); p = p->next; } free_userinfo_t(&u); } void test_insert_into_userinfo_t(){ userinfo_t new_user; new_user.userid = 5; char new_name[33]= "micheal"; strncpy(new_user.username,new_name,32); int ret= insert_userinfo_t(&new_user); printf("ret = %d\n",ret); }
输出
count:4
userid:1 username:Alex
userid:2 username:Allan
userid:3 username:Blizzard
userid:4 username:Bob
ret = 1
count:5
userid:1 username:Alex
userid:2 username:Allan
userid:3 username:Blizzard
userid:4 username:Bob
userid:5 username:micheal
gcc编译最后记得加上 -lsqlite3
本文只是很初略的介绍了sqlite嵌入式数据库的基本操作,初略到甚至例程只讲了两个操作,增加和查询,修改和删除都没有讲到,不过看了增加操作,修改和删除操作就很容易实现了。
写这篇文章目的只是一个想讲一个过程,一个操作数据库的基本过程
一个数据库操作流程
1 打开数据库2 编译准备SQL语句
3 绑定SQL语句参数
4 执行SQL语句
5 关闭释放Statement
6 关闭数据库
当然也只是一个初略的流程,对于数据库操作失败的流程处理也没有。不过了解上面这个初略的流程就可以了。更深入的讲解请参见下篇:[sqlite嵌入式数据库C语言基本操作(2)]
参考文献:
sqlite官方网站:sqlite.org
generated by haroopad
相关文章推荐
- 嵌入式 基于C API的SQLite3基本数据库操作
- 用c语言动态操作sqlite3数据库v1.0
- 基于C API的SQLite3基本数据库操作
- C语言实现sqlite3数据库查询的基本方法
- iOS_数据库3_sqlite3基本操作
- [Sqlite]-->嵌入式数据库事务理解以及实例操作
- SQLite基本操作加数据库分页查询
- [Python]操作嵌入式数据库SQLite
- 基于C API的SQLite3基本数据库操作
- android系统内置数据库SQLite的建库、建表、添加、删除、修改、查询等基本操作
- Linux下Sqlite3数据库的基本操作
- 用c语言动态操作sqlite3数据库v1.0
- 在Linux下用C语言操作数据库sqlite3(查询)
- Python:操作嵌入式数据库SQLite
- 在Linux下用C语言操作数据库sqlite3(建立数据库)
- java操作嵌入式数据库sqlite
- android SQLite数据库基本操作示例
- android SQLite数据库基本操作示例
- SQLite Android嵌入式数据库操作
- sqlite3的C语言API操作数据库的实例分析