Sqlite 数据库:

1.1 SQL 语法: http://www.w3school.com.cn/sql/

  1. SQL 语句对大小写不敏感。
    表名称 mytable , 列: id name iage
    1.1.1
    SELECT - 从数据库表中获取数据
    SELECT 列名称 FROM 表名称
    SELECT * FROM 表名称
         Select id from mytable ; // 从表中显示id 信息
                                  Select id,name  from mytable ;  // 返回 id name 信息
                                  Select id,name,value from mytbale; // 返回 id name  value

的信息 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的运算符可在
WHERE 子句中使用:
这里写图片描述

![这里写图片描述](https://img-blog.csdn.net/20180801084746692?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpZ2VyMTU2MDUzNTM2MDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
1.1.2
                                      UPDATE - 更新数据库表中的数据

                                                UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
                                                UPDATE  mytable  SET name= 'Fred'  WHERE id=”1” ;
                                                UPDATE  mytable  SET name= 'Zhongshan', age= “11”  WHERE  id= “4” ;
                         1.1.3       DELETE - 从数据库表中删除数据

                                                DELETE FROM 表名称 WHERE 列名称 = 值
                                                DELETE  FROM  mytable  WHERE   id=”1”;
                         1.1.4        INSERT INTO - 向数据库表中插入数据

                                                INSERT INTO 表名称 VALUES (值1, 值2,....)
                                                INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
                                                INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

1.2 linux下 sqlite 的命令:

     sqlite3   test.db ,创建一个名为test.db 的数据库 ;
     Create  table  mytable(id,name,age);  创建了一个名字叫mytabel的数据表,该数据表内定义了三个字段,分别为 id、name、age。 
         .mode column (注意没有分号),设置为列显示模式
         .databases 查看数据库信息
         sqlitebrowser test.db  图形化显示数据库. 

1.3 嵌入式C 对 sqlite的操作:
常用函数

sqlite3_open(const char *filename, sqlite3 **ppDb);  
sqlite3_close(sqlite3 *db);  
sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**),  void *, char **errmsg);  

这三个函数基本上能完成对sqlite3的所有操作。需要用的头文件为”sqlite3.h”。
打开(新建)数据库

sqlite3 *db;
sqlite3_open(“test.db”, &db);
关闭数据库


sqlite3_close(db);  
执行sql语句(以创建表为例)
char sql[128];  
memset(sql, '\0', 128);  
sprintf(sql, "%s%s%s", "create table ""test_tb", "(id INTEGER PRIMARY KEY, data TEXT)");  
sqlite3_exec(db, sql, NULL, NULL, NULL);  
sqlite3_exec中第一个参数:数据库名。

第二个参数 sql 操作语句。
第三个参数是一个回调(callback)函数。
第四个参数可用于给回调函数传入一个参数。
sqlite3_exec函数的返回指,它返回一个整型的数,

编译:arm-linux-gnueabihf-gcc -o test sqlite.c -lsqlite3

示例:

#include <stdio.h>   
#include <string.h>   
#include <sqlite3.h>    
/* callback函数中: 
 * arg: 是从主函数传进来的参数 
 * values: 是查询结果的值 
 * names: 查询结果列的名字 
 */  
int wf_callback(void *arg, int nr, char **values, char **names)  
{  
    printf("wf_callback is called \n");
    int i;  
    char str[128];  
    for (i=0; i<nr; i++) { 
      printf("id =%s,  %s \n",names[i] ,values[i] );  
    }  

    return 0;  
}  

int main()  
{  
    char sql[128];  
    sqlite3 *db;  

    sqlite3_open("test.db", &db);  //打开(或新建)一个数据库   
    memset(sql, '\0', 128);  
    /* 新建一张表 */  
    strcpy(sql, "create table mytable (id,name,age)");  
    sqlite3_exec(db, sql, NULL, NULL, NULL);  

    memset(sql, '\0', 128);  
    strcpy(sql, "insert into mytable values ('1','luan','20')"); 
    sqlite3_exec(db, sql, NULL, NULL, NULL);
    memset(sql, '\0', 128);  
    strcpy(sql, "insert into mytable values ('2','sun','21')"); 
    sqlite3_exec(db, sql, NULL, NULL, NULL);
    memset(sql, '\0', 128);  
    strcpy(sql, "insert into mytable values ('3','wang','22')");
    sqlite3_exec(db, sql, NULL, NULL, NULL);

    memset(sql, '\0', 128);  
    strcpy(sql, "select * from mytable");  
    sqlite3_exec(db, sql, wf_callback, NULL, NULL);  
    sqlite3_close(db); //关闭数据库   
    return 0;  
}           

1.4 嵌入式编译、配置:
./configure –host=arm-linux-gnueabihf –prefix=$PWD/temp_install
Sudo make
Sudo make install

将编译好的头文件、动态库复制到工具链中
sudo cp sqlite3ext.h sqlite3.h /usr/arm-linux-gnueabihf/include/
sudo cp libsqlite3.so libsqlite3.so.0.8.6 libsqlite3.so /usr/arm-linux-gnueabihf/lib/
将编译好的动态库 复制到文件系统中:
sudo cp libsqlite3.so.0 libsqlite3.so.0.8.6 libsqlite3.so /home/book/work/rootfs_min/lib -rf

回调函数的格式如下:

int sqlite_callback(
    void* pv,    /* 由 sqlite3_exec() 的第四个参数传递而来 */
    int argc,        /* 表的列数 */
    char** argv,    /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */
    char** col        /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */
);

参数格式:
传给sqlite3_exec的回调函数,用来显示查询结果
对每一条查询结果调用一次该回调函数
参数:
pv:由sqlite3_exec传递的初始化参数
argc:表头的列数
col:表头的名字数组指针
argv:表头的数据数组指针
返回值:
1:中断查找
0:继续列举查询到的数据示例表:
+———————————–+

idpicdata(16进制数据)
1a.jpg00 00 00 …
2b.jpgXX XX XX

+———————————–+
对第一行数据:
argc=3 即 [0]…[2]
argv[0]=”1”,argv[1]=”a.jpg”,argv[2]=”00 00 00…”(实际16进制数据,非这里显示的字符串形式)
col[0]=”id”,col[1]=”pic”,col[2]=”data” 说明:
sqlite3_exec() 的回调函数必须按照此格式, 当然形参的名字任意.
如果某列的数据类型不是char*, 则可以对结果执行相关的转换, 如:用atoi()把结果转换为整数(integer), 如果是二进制数据, 则可以直接强制类型转换, 如:(void*)argv[i].
该回调函数有两种返回值类型.
1.返回零:sqlite3_exec() 将继续执行查询.
2.返回非零:sqlite3_exec()将立即中断查询, 且 sqlite3_exec() 将返回 SQLITE_ABORT.
示例:

 for (i=0; i<nr; i++) { 
      printf(" %s,  %s  ;",names[i] ,values[i] );  
    } 
    printf("\n");

     执行 select * from mytable
           id   name    age
  *        1    luan    20
           2    sun    21
           3    wang   22
  回调函数将被执行3 次
  其中nr 为  表的列数 , names 的值为 mytable 的列属性, val为列属性对应的值
wf_callback is called 

id, 1 ; name, luan ; age, 20 ;
wf_callback is called
id, 2 ; name, sun ; age, 21 ;
wf_callback is called
id, 3 ; name, wang ; age, 22 ;
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值