Sqlite3使用

SQL(结构化查询语言):
关系式数据库管理系统的标准语言,用于存取数据及查询、更新和管理DBMS
在使用它时,只要发出  做什么 命令,怎么做  是不用使用者考虑,功能强大,简单易学

DDL 数据定义语言
创建表,删除表,修改表
创建表:
create table 表名(字段 数据类型 [约束],...);
create table student(id integer primary key,name text,age integer check(age>6));
sqlite3的数据类型:
integer 整型 int
real 实型 float double
text 文本类型
null 空类型
blob 二进制类型
常用约束条件:
primary key 主键 唯一的标识表中一条记录
not null 不为空
unique 唯一
check 检查
default 默认

删除表:
drop table 表名;

修改表结构:
修改表名:
alter table 表名 rename to 新的表名;
增加一个字段:
alter table 表名 add column 字段名 字段类型;
alter table s add column addr text default "CHINA";

DML 数据操纵语言
增 删 改 查
插入记录:
insert into 表名(字段1,字段2,...)values(字段值1,字段值2,...);
insert into s(id,name,age)values(1002,"关羽",21);


insert into 表名 values(字段值,...);
insert into s values(1003,"刘备",25,"中山");


修改记录:
update 表名 set 字段1=新值,字段2=新值 [where 条件];
条件:字段 运算符 值
运算符:= !=(<>) >= <=
条件1 and/or 条件2 
update s set name='张翼德' where id=1001;

删除记录:
delete from 表名 [where 条件];
查询记录:
select * from 表名;
select 字段1,字段2,... from 表名;
select * from 表名 [where 条件];
select name,addr from s where name='张飞';

查找某表中所有姓张的同学;
模糊查询:
like: %替代一个或多个字符  _替代一个字符
where name like '张%';

排序:order by (升序asc 降序desc)
select * from 表名 order by 字段 desc/asc; 
select * from s order by age desc;

限定:limit 数字
select * from 表名 limit 数字;
select * from s limit 2;

限定+排序:
select * from 表名 order by 字段 desc limit 数字;
select * from s order by age desc limit 1;

函数:
abs() length() upper() lower() typeof() 了解
sum() avg() count() min() max()

select count() from s;
select sum(age) from s;
time()
date()
datetime('now','localtime','+/-n day',...)
datetime('now','localtime','+1 day','+1 month','+1 year')

分组:group by
用于结合上述函数使用,根据一个或多个字段对结果集进行分组

select id,sum(score) as sum from cj group by id order by sum asc;
select id,sum(score) as sum from cj group by id order by sum desc limit 1;

名称与别名:
...字段 as 别名...


多表查询:
select 字段,... from 表1,表2...where 条件;
找成绩为100分的那个同学的名字

select * from s,cj where score=100 and  id =id1
select name from 表1,表2 where 表1.id=表2.id
select name from s,s1 where s1.score=‘100' and s.id=s1.id;
select s.id,name from s,cj where cj.score=100 and s.id=cj.id;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.sqlite3编译:

1.PC版:
1.解压:
tar xvf sqlite-autoconf-3140100.tar.gz 
cd sqlite-autoconf-3140100/
2.检查配置
sudo apt-get install libreadline-dev 
./configure --prefix=/usr/local/sqlite3/PC
3.make
4.sudo make install

5.检查确认是否编译成功:
cd /usr/local/sqlite3/PC/bin
./sqlite3 -version
显示结果如下:
3.14.1 2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b



2.ARM版:

0.rm sqlite-autoconf-3140100/ -rf
1.解压
tar xvf sqlite-autoconf-3140100.tar.gz 
2.检查配置:
cd sqlite-autoconf-3140100/
./configure --prefix=/usr/local/sqlite3/ARM --host=arm-linux
3.make
4.sudo make install
5.检查确认是否编译成功:
cd /usr/local/sqlite3/ARM/bin
file ./sqlite3
显示如下:
./sqlite3: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped

注:如果make install出现如下错误:
./libtool: line 1720: arm-linux-ranlib: command not found
make[1]: *** [install-libLTLIBRARIES] Error 127
解决方法:
sudo -s
export PATH=$PATH:/usr/local/arm/arm-2009q3/bin
make install
操件完成后退出root用户
exit


6.把bin目录和lib目录打包、下载到开发板
cd /usr/local/sqlite3/ARM/
sudo tar zcvf libsqlite3.tar.gz bin lib 
cp libsqlite3.tar.gz ~/tftp
建议下载到开发板的home目录,不要放在根目录下
打开开发板:
cd /home
tftp -gr libsqlite3.tar.gz 192.168.1.XX
tar xvf libsqlite3.tar.gz
把bin目录下的sqlite3 拷贝到 /bin
cp bin/sqlite3 /bin
把lib目录下的libsqlite3* 拷贝到/lib

cp lib/libsqlite3* /lib

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

sqlite3命令行:
export PATH=$PATH:/usr/local/sqlite3/PC

csgec@ubuntu:~$ sqlite3 
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> 

1.查看版本
sqlite3 -version
2.退出
进入到sqlite3命令行后,怎么退出呢?
sqlite> .quit/.exit/.q

3.查看数据库有哪些表
.table/.tab

4.查看表的创建结构
.schema
5.设置显示模式
显示可设置的选项
.show
.help
设置选项:
.headers on
.mode column
.output /home/csgec/829.txt


vim .sqliterc //在家目录下创建此配置文件
6.备份
1.备份数据库
cp test.db test.db.bak
2.备份表
.output /home/csgec/s.sql
.dump 表名
.read /home/csgec/s.sql  //把备份好的数据读回来

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The following two objects and eight methods comprise the essential elements of the SQLite interface:




sqlite3   数据库连接对象
sqlite3_stmt 准备好的SQL语句对象
sqlite3_open() 创建连接对象,并打开
sqlite3_prepare() 准备SQL语句
sqlite3_bind() 给带参数的SQL语句绑定值
sqlite3_step() 执行SQL语句
sqlite3_column() 从结果集取值
sqlite3_finalize() 销毁sqlite3_stmt对象
sqlite3_close() 关闭数据库连接


sqlite3_exec() 封装函数,用于执行SQL语句


------------------------------------------
数据库操作流程:
1.连接数据库
2.打开数据库
sqlite3* db;
int sqlite3_open(
 const char *filename,   /* 数据库库名,如存在,则打开,不存在,则创建*/
 sqlite3 **ppDb          /* 数据库连接对象 */
);
返回值:成功返回 SQLITE_OK
其它表示失败,可用sqlite3_errmsg()获取错误信息
3.操作数据库
char *errmsg;
int sqlite3_exec(
 sqlite3*,                                  /* 数据库连接对象*/
 const char *sql,                           /* 要执行的SQL语句(字符串) */
 int (*callback)(void*,int,char**,char**),  /* 回调函数 */
 void *,                                    /* 回调函数的第一个参数 */
 char **errmsg                              /* 错误信息写在这里了 */
);
注:
如果要执行的SQL语句没有返回结果集,那么第三、四个参数给NULL就可以了
如果要执行的SQL语句有返回结果集,那么需要通过回调函数来获取结果集中的记录
每查到一条记录,就调用一次回调函数
要注意回调函数的返回值,应该要返回一个整数

回调函数格式:
int callback(void* arg, 从exec传过来的参数
int column_number, 记录的字段数
char **column_values,保存记录的值一维数组
char** column_name 保存记录的字段名的数组
);


4.关闭数据库
int sqlite3_close(sqlite3*);
参数:sqlite3_open打开/创建的数据库连接对象
返回值:成功返回 SQLITE_OK
其它表示失败,可用sqlite3_errmsg()获取错误信息
----------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值