SQLite数据库
一、SQLite下载安装
下载网站http://www.sqlite.org/sqlite-3.6.18.tar.gz
解压缩:tar zxvf sqlite-3.6.18.tar.gz
cd sqlite-3.6.18
./configure –disable-tcl
sudo make & sudo make install
二、命令行模式下:
1、创建数据库:sqlite3 test.db
删除数据库:rm test.db
2、创建表: create table infor(name varchar(10),id int primary key not null);// primary key主键
删除表:drop table infor;
3、插入数据: insert into infor values('wang',24);
4、查询数据: select * from infor;
Select id,name from infor;
Select * from infor where id > 10;
Select * from infor where id > 10 and name=’wang’;
Select * from infor where name like ‘w%’;//以w开头
Select * from infor where name like ‘_?_’;//三个字符,中间为?
Select * from infor where name glob ‘w*’; //以w开头
Select * from infor where name glob ‘?-?’;//三个字符,中间为-
5、删除数据: delete from infor where name like 'wei';
delete from infor where name='wei';
6、更新数据: update infor set age=18 where name='wei';
7、导出数据库:
方法一:.output xxxdb.sql
.dump
方法二:sqlite3 xxx.db .dump > xxx.sql
导出数据表:
方法一:.output xxx.sql//或者文件名xxx.txt
.dump 表名
方法二:sqlite3 xxx.db > xxx.sql
8、导入数据库:.read xxx.sql
导入数据表:.separator ","
.import data.txt 表名
9、算术运算符
Select 10+20; //+、-、*、、、%
10、排序 order by
Select * from infor order by id asc;//按id升序排序
Select * from infor order by id desc;//按id降序排序
11、GROUP BY
子句用于与 SELECT 语句一起使用,来对相同的数据进行分组
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
假设数据表中有同名:
Select name,sum(salary) from company group by name order by name;
12、distinct
与 SELECT 语句一起使用,来消除所有重复的记录
Select distinct name from company;13、触发器(trigger)
是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用
可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发
Create trigger test_trigger after insert on company
Begin
Insert into infor values(‘wang’,24);
End;
当数据表company有insert语句时,便会触发。
14、alter
用来在已有的表中添加一个新的列
Alter table infor add column sex char(1);
15、事务(transaction)
Begin;
Select from infor where id=10;
Commit;
16、日期 & 时间
Date(‘now’);
Time(‘now’);
Datetime(‘now’);
17、常用函数
三、c/c++接口API
四、其它命令
退出sqlite提示符:.quit
查看表的结构:.schema 表名 //后面不用分号
like:(%)代表零个、一个或多个数字或字符
(_)代表一个单一的数字或字
glob: GLOB 是大小写敏感的
(*)代表零个、一个或多个数字或字符
(?)代表一个单一的数字或字符
五、附加程序
#include <stdio.h>
#include <sqlite3.h>
int main()
{
sqlite3 *pdb = NULL;
char *szErrMsg = NULL;
int rc,i = 0;
char *sql = "create table test_table(ID integer primary key,name varchar(12));";
int nrow=0,ncolumn=0;
char **presult;//二维数组存放结果
//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
rc = sqlite3_open("test.db",&pdb);
if(rc)
{
fprintf(stderr,"can't open database %s\n",sqlite3_errmsg(pdb));
sqlite3_close(pdb);
return -1;
}
//创建一张新的数据表
sqlite3_exec(pdb,sql,0,0,&szErrMsg);
sql = "insert into test_table values(1,'wang');";
sqlite3_exec(pdb,sql,0,0,&szErrMsg);
sql = "insert into test_table values(2,'tom');";
sqlite3_exec(pdb,sql,0,0,&szErrMsg);
//查询所有记录
sql = "select * from test_table";
sqlite3_get_table(pdb,sql,&presult,&nrow,&ncolumn,&szErrMsg);
//printf("query recond %d\n ID NAME:\n",nrow);
for(i = 0; i < (nrow+1)*ncolumn; i++)
{
printf("%s",presult[i]);
if(i%2 == 0)
{
printf("\n");
}
}
//释放presult空间
sqlite3_free_table(presult);
sqlite3_close(pdb);//关闭数据库
return 0;
}
六、编译
gcc date.c -o date -lsqlite3
gcc testdate.c -o testdate -lsqlite3 -L/usr/local/lib -I/usr/local/include -static –lpthread