[国嵌攻略][182][Sqlite嵌入式数据库移植]

数据库系统构成

在计算机系统中,保存数据的方式一般有两种:

1.普通文件方式

2.数据库方式

相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性。

数据库系统一般由三个部分构成

1.数据库

2.数据库管理系统

3.数据库访问应用

sqlite属于数据库管理系统。在数据库中,数据都是以表的形式存在。表与表之间,可能存在关系。sql(结构化查询语言),是一种特殊的编程语言,用于访问数据库中的数据。

移植sqlite到开发板

1.解压

tar zxvf sqlite-autoconf-3070800.tar.gz

2.配置

mkdir _install

./configure –-host=arm-linux –-prefix=${PWD}/_install

3.修改Makefile

搜索-DPACKAGE_STRING="sqlite 3.7.8"

删除3.7.8路径前空格,-DPACKAGE_STRING="sqlite3.7.8"

4.编译

make

5.安装

make install

生成的sqlite数据库管理系统在_install/bin/目录下,拷贝到.../rootfs/sbin/目录下。

生成的库函数在_install/lib/目录下,拷贝到.../rootfs/lib/目录下。

编译数据库访问应用程序

arm-linux-gcc -L .../_install/lib -lsqlite3 -I .../_install/include db.c -o db

使用数据库访问程序

1.创建

./db student.db “create talbe stu(number smallint not null primary key, name varchar(20));”

2.插入

./db student.db “insert into stu values(1, ‘xiao ming’);”   字符串用单引号

./db student.db “insert into stu values(2, ‘xiao hong’);”   字符串用单引号

3.查询

./db student.db “select * from stu where name like %xiao%;”

4.删除

./db student.db “delete from stu where number = 2;”

db.c

#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char **argv);
static int callback(void *notUsed, int argc, char **argv, char **colName);

int main(int argc, char **argv){
    //检测参数项
    if(argc != 3){
        printf("Usage:
	%s <database> <sql statement>
", argv[0]);
        return -1;
    }
    
    //打开数据库
    sqlite3 *db;
    int isErr;
    
    isErr = sqlite3_open(argv[1], &db);
    if(isErr){
        //显示错误值
        printf("Can not open: %s", sqlite3_errmsg(db));
        
        //关闭数据库
        sqlite3_close(db);
        
        return -1;
    }
    
    //访问数据库
    char *errMsg;
    int isExec;
    
    isExec = sqlite3_exec(db, argv[2], callback, 0, &errMsg);
    if(isExec != SQLITE_OK){
        //显示错误值
        printf("Can not exec: %s", errMsg);
        
        //关闭数据库
        sqlite3_close(db);
        
        return -1;
    }
    
    //关闭数据库
    sqlite3_close(db);
    
    return 0;
}

static int callback(void *notUsed, int argc, char **argv, char **colName){
    //显示回调数据
    int i;
    char *value;
    
    for(i = 0; i < argc; i++){
        printf("%s ", argv[i] ? argv[i] : "NULL");
    }
    printf("
");
    
    return 0;
}
原文地址:https://www.cnblogs.com/d442130165/p/5361054.html