C++学习之sqlite

来源:互联网 发布:sql delete select 编辑:程序博客网 时间:2024/06/06 04:32

说明:这篇文章的内存基本是来自the definitive guide to sqlite这本书,另外强调一个概念是开发中遇到的问题:bind blob


很久之前就用过sqlite,但是现在已经完全没有概念了,再次学习是个很苦恼的过程,所以就写下如下文章作为备份。

首先sqlite如其名,是一个lite的数据库,lite体现在什么地方?体现在不用一个单独的服务器,可以直接集成到当前的程序之中,比较适合APP保存一些自身的数据,其并不太适合做大型网络的数据库。

1)工具

sqlite有一套很好的上手工具,非常方便我们做一些测试,下面的一串shell的脚本介绍了基本用法

基本的使用命令分成两种,一种是sql语句,另外一种是辅助命令都是以点打头的。另外已点需要强调的是所有sql相关的输入都要以“;”结束。

mike@linux tmp $ sqlite3   test.db  // 创建了一个test.db的数据库SQLite version 3.3.4Enter ".help" for instructionssqlite> .h       // 这个命令值得仔细看看
sqlite> create table test (id integer primary key, value text);
sqlite> insert into test (value) values('eenie');    
sqlite> .mode colsqlite> .headers onsqlite> SELECT * FROM test;
sqlite> create index test_idx on test (value);sqlite> create view schema as select * from sqlite_master;
sqlite> .tables    
sqlite> .output file.sqlsqlite> .dumpsqlite> .output stdout
sqlite>.exit   

下面是sql语句和数据库之间的相互转换。

sqlite3 test.db .dump > test.sql    

sqlite3 test.db < test.sql    

有了上面的工具,我们就对当前的数据库了如指掌了,操作起来也更加有信心。


2) sql语法


这一段落顺带记录一些简单的sql语法,同样是用来备忘,sql的语法关键字很多,这里不会都列出来,所以有需要可以去到google查一下


CREATE TABLE contacts ( id INTEGER PRIMARY KEY,

                        name TEXT NOT NULL COLLATE NOCASE,
                        phone TEXT NOT NULL DEFAULT 'UNKNOWN',                        UNIQUE (name,phone) );

SELECT burger FROM kitchen WHERE patties=2 AND toppings='jalopenos'AND condiment != 'mayo' LIMIT 1; 

SELECT id, name FROM foods;INSERT INTO foods VALUES (NULL, 'Whataburger');DELETE FROM foods WHERE id=413;

3) API

API一般都会分C和C++两种,区别就是有没有用面向对象的设计模式,一般讲面向对象的API更容易理解一些,但是C的API通用性更强。

数据库的打开和关闭:

sqlite3_open     sqlite3_close   这两个是基础。

sql语句的运行

sqlite3_exec   这个是最容易理解的API,就是直接运行sql代码,比较适合修改数据库,如果要查询就稍微有些麻烦,需要写一个回调函数,把这个函数指针作为参数送进去。

sqlite3_get_table   和上面的非常类似,都是简化的API,区别是这个用来查询更加方便,不需要还要回调函数。

复杂的sql语句的运行

一般来讲sql的语句的运行需要经过三个过程:prepare, step, finalize

绑定参数(bind)

有些类型的参数必须使用bind的方式加进去,比如blob类型。

在复杂调用模式中,可以绑定参数,具体做法是先用?或者:之类的指定哪些是要绑定的参数,之后再调用绑定函数,关于绑定的介绍可以参考

http://blog.csdn.net/northcan/article/details/7235519


4)misc

sqlite还有很多高级的运用,比如多线程环境,内存的优化之类的,上面的基本介绍已经能满足日常应用,如果有进一步的优化需求再研究。


0 0
原创粉丝点击