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* 拷贝到/libcp 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()获取错误信息 ----------------------------
