博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sqlite3
阅读量:5925 次
发布时间:2019-06-19

本文共 2426 字,大约阅读时间需要 8 分钟。

Sqlite3初学

Sqlite3是一个非常灵活的数据库系统,没有数据库服务器的概念,这应该算是回归了比较传统的数据库设计。
早期我们的数据都是直接存放在文件系统,由于简单的文件系统存在数据冗余、不一致、读取操作繁琐(每个数据结构都可能要编写自己的读写程序)等,慢慢形成了数据库管理系统,一套完整的数据库理论。
目前较为流行的Oracle, SqlServer, MySql等数据库系统均是服务器-客户端的概念,数据库服务器负责所有的数据管理、权限管理等,客户端按照一定格式发出请求即可。
sql则是较为流行的结构化查询语言,为众多上层应用提供简单方便的数据库读写操作等。
但是可想而知,服务器端必定是需要对sql请求进行解析然后执行的,那么这些执行程序还得回归更底层的语言,比如C&C++的实现。
注意:(第1代语言 机器语言(指令系统)其指令为二进制代码(0、1),直接对应芯片上的运算了
 第2代语言 汇编语言 用“助记符”代替二进制代码,如用ADD  A,B表示两数相加。
 第3代语言 高级语言(面向过程)例如:C、JAVA、C++。
 第4代语言(非过程化语言)    例如:SQL语言。
 第5代语言(智能化语言)    例如:Prolog语言)
 
 而sqlite3从功能上来说,这是一个数据库系统,其本质上是由一套用C语言实现的对数据库文件的读写接口。此类接口支持sql语言。所以,这不需要什么服务器,也没有数据库权限管理。在程序中可以随时调用API创建一个数据库文件,进行数据存储,非常灵活易用。
 
 下面简单罗列其使用举例:
1,打开或创建数据库文件
 sqlite3 *mDb; //数据库句柄
 int ret = sqlite3_open_v2(fileName, &mDb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); 
    if(ret != SQLITE_OK)
    {
        sqlite3_close(mDb);
    }
2,创建一个sql语句
由数据库句柄创建一个sql语句句柄
sqlite3_stmt *SqlDb::prepare(const char *sqlText)
{
 sqlite3_stmt *stmt = NULL;
 const char *tail = NULL;
 sqlite3_prepare_v2(mDb, sqlText, -1, &stmt, &tail);
 return stmt;
}
3,执行sql语句
 sqlite3_stmt *stmt;
 int ret = sqlite3_step(stmt);
 如果是update, delete, insert等语句,正常应该返回 SQLITE_DONE ;如果是select语句,且有还有记录,则应该返回SQLITE_ROW;
4,如何对sql语句绑定参数值
    在ado.net中,一般可以通过存储过程中的变量值绑定。
 在这里的写法是 insert ... values(?, ?)其中?表示绑定的参数
  sqlite3_bind_int(sqlite3_stmt*, int index, int value); 表示将value绑定给第index个参数
  还可以绑定double,text,blob等。
  sqlite3_bind_int64(sqlite3_stmt*, int index, int64 value);
  sqlite3_bind_double(sqlite3_stmt*, int index, double value);
  sqlite3_bind_text(sqlite3_stmt*, int index, const char* value, size, SQLITE_TRANSIENT); //最后一个参数好像是表示是否需要拷贝一份,这里的value是一个指针,防止其指向的对象被修改。
  sqlite3_bind_blob(sqlite3_stmt*, int index, const void* value, size, SQLITE_TRANSIENT);
  正常返回SQLITE_OK。
5如何取得sql语句执行结果
     与绑定比较类似,
 int value = sqlite3_column_int(sqlite3_stmt*, int index);
 int64 value = sqlite3_column_int64(sqlite3_stmt*, int index);
 double value = sqlite3_column_double(sqlite3_stmt*, int index);

 const uchar **value, int *size

 *value = sqlite3_column_text(sqlite3_stmt*,  int index);
 *size = sqlite3_column_bytes(sqlite3_stmt*,  int index);

 *value = sqlite3_column_blob(sqlite3_stmt*,  int index);

 *size = sqlite3_column_bytes(sqlite3_stmt*,  int index);
 注意text,blob返回的是一个指针,该指针指向的内容应该是sqlite3_stmt自己维护的内存中,那么这部分数据什么时候释放呢??我猜想应该是在调用以下语句时:
 sqlite3_finalize(sqlite3_stmt*); //注意,我们执行完一个sql语句后,应该及时调用该语句。
6,关闭数据库
 sqlite3_close(sqlite3 *);

转载于:https://www.cnblogs.com/vajra1025/p/4728400.html

你可能感兴趣的文章
saltstack的安装(转载连接)
查看>>
解决windows系统80端口被占用问题
查看>>
文本文档TXT每行开头结尾加内容批处理代码
查看>>
Tomcat详解
查看>>
10分钟采集凡客最新的省、市、区、邮政编码和电话区号(附源码)
查看>>
【Linux】IPC-消息队列
查看>>
【Python】猜数小游戏(文件操作)
查看>>
(装载)C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
查看>>
php的几种运行模式CLI、CGI、FastCGI、mod_php
查看>>
[原创]同一个Tomcat,配置多个context、多个Host
查看>>
MyEclipse的Git配置
查看>>
Beta版本发布报告
查看>>
剑指offer-面试题13.在O(1)时间删除链表节点
查看>>
关于清晰讲解linux正则表达式的博文分享
查看>>
oslo.config资源
查看>>
ext 浅谈类的实例
查看>>
shell printf命令:格式化输出语句
查看>>
snmpd服务无法更改默认端口
查看>>
centos 7.x systemd service 配置方法整理
查看>>
云计算涉足网游
查看>>