操作系统:Ubuntu 10.04
一. sqlite基本操作
1. 安装sqlite3软件
sudo apt-get install sqlite3
tips:这个仅是个数据库软件,并不能提供編程所需环境
2. 查看安装是否成功
$ sqlite3
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
3. sqlite3常用命令
$ sqlite3 数据库名 // 从终端打开指定数据库;若数据庫不存在,则创建;若不跟数据库名称,则打开temp.
sqlite>.quit // 退出sqlite
sqlite>.database // 显示当前打开的数据库文件
sqlite>.tables // 显示数据库中所有表名
sqlite>.schema table_name // 查看表結构
e.g. .schema contact
/************************/
/*以下为sql语句,要以";"结束*/
/************************/
sqlite>create table table_name(column1, column2, ...); // 新建table
e.g. create table contact(name, telnum);
// 增
sqlite>insert into table_name values('xxxx', 'xxxx', ...); // 给表中新增一条,必须将所有column都初始化
e.g. insert into contact values('xiaoming', '13400000000');
sqlite>alter table table_name add column column1; // 给表中增加一列
e.g. alter table contact add column email;
// 删
sqlite>drop table table_name; // 删除指定表
e.g. drop table contact
sqlite>delete from table_name where column1='xxxx' // 删除表中列column1内容为xxxx的一行
e.g. delete from contact where name='xiaoming'
// 改
sqlite>update table_name set column1='xxxx',column2='xxxx' where column1='xxxx'; // 更新表中column1='xxxx'那行column1和column2
e.g. update contact set name='xiaoqiang', email='123@126.com' where name='xiaoming';
// 查
sqlite>select * from table_name; // 查该表中所有内容
e.g. select * from contact;
sqlite>select * from table_name where column1='xxxx'; // 查该表中column='xxxx'所在行的内容
e.g. select * from contact where telnum='13400000000';
sqlite>select column1 from table_name; // 查该表中column列的内容
e.g. select name from contact;
tips: 目前该版本还不能删除指定列
二. sqlite3 C编程
1. 安装库和头文件
方法一: 在只安装了上述软件的基础上,还须安裝庫才能编程
sudo apt-get install libsqlite3 libsqlite3-dev
方法二: 官网下载源码,自己编译安装
http://www.sqlite.org/download.html
sqlite-autoconf-3071700.tar.gz
$ tar zxvf sqlite-autoconf-3071700.tar.gz
$ cd sqlite-autoconf-3071700.tar.gz
$ ./configure
$ make
$ sudo make install
2. Demo
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <error.h>
#include <sqlite3.h>
#define ERROR(_msg_) error(EXIT_FAILURE, errno, "<in %s : line %d> %s\n",\
__FILE__, __LINE__, _msg_)
int callback(void *para, int f_num, char **f_value, char **f_name);
/**
* 创建db文件(argv[1])
* 创建table student
* 插入两个学生信息
* 用回调函数打印内容
**/
int main(int argc, char **argv)
{
int i;
sqlite3 *db = NULL;
char *errmsg = NULL;
char *sql[] = {
"create table student(name, number)",
"insert into student values('xiaoming', '1')",
"insert into student values('xiaoqiang', '2')",
"select * from student"
};
if(2 != argc)
ERROR("Invalid Input!");
if(SQLITE_OK != sqlite3_open(argv[1], &db))
ERROR(sqlite3_errmsg(db));
for(i = 0; i < sizeof(sql)/ sizeof(sql[0]) - 1; ++i){
if(SQLITE_OK != sqlite3_exec(db, sql[i], NULL, NULL, &errmsg))
ERROR(sqlite3_errmsg(db));
}
if(SQLITE_OK != sqlite3_exec(db, sql[3], callback, NULL, &errmsg))
ERROR(sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
/**
* 回调函数:每找到一条记录自动执行一次
* para:
* f_num:记录中包含的列数
* f_value:该列所有值的指针数组
* f_name:所有列的指针数组
**/
int callback(void *para, int f_num, char **f_value, char **f_name)
{
int i;
for(i = 0; i < f_num; ++i)
printf("%s\t|\t%s\n", f_name[i], f_value[i]);
return 0;
}
gcc sqlite.c -o sqlite -lsqlite // 编译时不要忘记链上库
tips:源码包中的sqlite3.c sqlite3.hs就是核心code.
callback回调函数不是任何操作都有数据返回,如insert,delete均无数据返回,而select则有.