手机h5网站开发,上海软件开发工资一般多少,河南旅游网站建设,wordpress二维码制作目录#xff1a; 一、SQLite 简介二、SQLite 数据库安装1、安装方式一#xff1a;2、安装方式二#xff1a; 三、SQLite 的命令用法1、创建、打开、退出数据库#xff1a;2、编辑数据库#xff1a; 四、SQLite 的编程操作1、打开 / 创建数据库的 C 接口#xff1a;2、操作… 目录 一、SQLite 简介二、SQLite 数据库安装1、安装方式一2、安装方式二 三、SQLite 的命令用法1、创建、打开、退出数据库2、编辑数据库 四、SQLite 的编程操作1、打开 / 创建数据库的 C 接口2、操作表的 C 接口 一、SQLite 简介 轻量化易用的嵌入式数据库用于设备端的数据管理可以理解成单点的数据库。传统服务器型数据库用于管理多端设备更加复杂SQLite是一个无服务器的数据库是自包含的。这也称为嵌入式数据库这意味着数据库引擎作为应用程序的一部分运行MySQL需要运行服务器MySQL将需要客户端和服务器架构通过网络进行交互 SQLite的优点SQLite的缺点MySQL的优点MySQL的缺点基于文件易于设置和使用适合基础开发和测试轻松携带使用标准SQL语法进行微小更改使用方便缺乏用户管理和安全功能不容易扩展不适合大数据库无法定制使用方便提供了许多与数据库相关的功能良好的安全功能易于扩展适用于大型数据库提供良好的速度和性能提供良好的用户管理和多种访问控制需要一些技术专业知识来设置与传统SQL相比语法略有不同 基于嵌入式的数据库主要有SQLiteFirebirdBerkeley DBeXtremeDBFirebird是关系型数据库功能强大支持存储过程SQL兼容等SQLite关系型数据库体积小支持ACID事务Berkeley DB并没有数据库服务器的概念他的程序直接链接到应用程序中eXtremeDB是内存数据库运行效率高 二、SQLite 数据库安装
1、安装方式一
sudo apt-get -y install sqlite安装的可能不是最新版本
2、安装方式二
通过 SQLite 官方网址https://www.sqlite.org/download.html下载安装包
下载Source Code的sqlite-autoconf.tar.gz 将压缩包上传到开发板上解压并安装
tar xvf sqlite-autoconf-3460000.tar.gzcd sqlite-autoconf-3460000// 配置安装路径在/usr/local
./configure --prefix/usr/local// 编译
make// 安装
sudo make install三、SQLite 的命令用法
1、创建、打开、退出数据库
// 进入数据库指令交互页面
sqlite3// 退出数据库
.quit// 打开数据库 test.db没有该数据库则创建该数据库
.open test.db// 创建并打开数据库 test.db该指令直接在终端命令窗口运行
qulite3 test.db// 查看当前打开的数据库
.database// 敲错指令进入 ... 状态通过 ctrl z 退出
...2、编辑数据库
// 创建一张表格字段分别为整型 id字符型 name整型 score
create table stu(id Integer,name char,score Integer);// 列出数据库的所有表格
.tables// 在 stu 表格插入一条数据在 values() 编辑要插入内容
insert into stu values(001,lcx,99);// 在 stu 表格插入一条数据只有 name 和 score 字段内容
insert into stu(name,score) values(licx,100);// 查询 stu 表格的所有字段数据
select * from stu;// 只查询 stu 表格中 name 和 score 字段的内容
select name,score from stu;// 删除 stu 表格中 id 1 的所有数据
delete from stu where id 1;// 删除 stu 表格
drop table stu;// 更改表格 stu 的数据将 id 1 的所有数据的 name 改为 li
update stu set name li where id 1;// 增加 stu 表格一列数据分类字符型 sex
alter table stu add column sex char;四、SQLite 的编程操作 编译由于我的SQLite3安装在/usr/local/目录下而相应的库在/usr/local/lib/目录下 编译时应该链接库-lsqlite3 1、打开 / 创建数据库的 C 接口
打开一个指向 SQLite 数据库文件的连接
#include sqlite3.hint sqlite3_open(const char *filename, sqlite3 **ppDb);返回值成功返回 0失败返回非 0 错误代码filename参数需要打开的SQLite数据库的文件名ppDb参数返回一个用于其他SQLite程序的数据库连接对象 关闭之前调用 sqlite3_open() 打开的数据库连接
#include sqlite3.hint sqlite3_close(sqlite3 *ppDb);返回值成功返回 0失败返回错误代码如果还有查询没有完成sqlite3_close()将返回SQLITE_BUSY禁止关闭的错误消息 错误信息
#include sqlite3.hconst char *sqlite3_errmsg(sqlite3 *db);
// 通过出错的句柄返回错误信息获取最近调用的 API 接口返回的错误信息int sqlite3_errcode(sqlite3 *db);
// 通过出错句柄返回错误码通常用来获取最近调用的 API 接口返回的错误代码打开关闭数据库例程
#include stdio.h
#include sqlite3.h
#include stdlib.hint main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg 0;int rc;if(argc 2){printf(Usage: %s xxx.db\n, argv[0]);return -1;}rc sqlite3_open(argv[1], db);if(rc){printf(Cant open database: %s\n, sqlite3_errmsg(db));printf(Error code: %d\n, sqlite3_errcode(db));return -1;}else{printf(Opened database successfully\n);}sqlite3_close(db);return 0;
}2、操作表的 C 接口
操作数据库的函数
#include sqlite3.hsqlite3_exec(sqlite3 *db, const char *sql, sqlite_callback, void *data, char **errmsg);// 回调函数
typedef int (*sqlite3_callback)(void*,int,char**, char**);返回值成功返回 0失败返回错误代码db参数数据库的句柄sql参数执行SQL命令的语句参考 三、SQLite 的命令用法sqlite_callback类型函数参数回调函数int callback(void *arg, int column_size, char *column_value[], char *column_name[]);arg参数 执行sqlite3_exec()时由sqlite3_exec()传递给回调函数sqlite3_exec()的data参数值column_size参数 执行sqlite3_exec()时由sqlite3_exec()传递给回调函数数据库的字段数column_value参数 执行sqlite3_exec()时由sqlite3_exec()传递给回调函数数据库列的值column_name参数 执行sqlite3_exec()时由sqlite3_exec()传递给回调函数字段名data参数传递给回调函数的参数地址errmsg参数返回的错误信息
例程打印数据库中 stu 表的数据
#include stdio.h
#include sqlite3.hint callback(void *arg, int column_size, char *column_value[], char *column_name[])
{int i;printf(arg %s\n,(char *)arg);for(i0;icolumn_size;i){printf(%s %s\n, column_name[i], column_value[i]);}printf(--------------------\n);return 0; // 这里必须返回 0这样数据库中有多少条数据这个回调函数就会被调用多少次
}int main(char argc, char **argv)
{sqlite3 *db;int ret;char *errMsg NULL;if(argc 2){printf(Usage: %s xxx.db\n,argv[0]);return -1;}if( (ret sqlite3_open(argv[1],db)) SQLITE_OK){printf(open %s success\n,argv[1]);}else{printf(error:%s,%d\n,sqlite3_errmsg(db),ret);if(ret 14){printf(permission den\n);}return -1;}sqlite3_exec(db, select * from stu;, callback, content of sql:, errMsg);// 注意我们的 errMsg 初始化时为 NULL 空指针理由是 sqlite_exec() 运行时会为该指针分配内存空间sqlite3_close(db);printf(done\n);return 0;
}现有如图所示表
运行结果
创建表操作关键代码
int callback(void *NotUsed, int argc, char **argv, char **azColName)
{int i;for(i0; iargc; i){printf(%s %s\n, azColName[i], argv[i] ? argv[i] : NULL);}printf(\n);return 0;
}...... ...... ...... ...... ...... ......ret sqlite3_exec(db, create table stu(id Integer,name char);, \callback, NULL, errMsg);if( ret ! SQLITE_OK ){fprintf(stderr, SQL error: %s\n, errMsg);sqlite3_free(errMsg);}else{fprintf(stdout, Table created successfully\n);}向表中插入数据关键代码
int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i0; iargc; i){printf(%s %s\n, azColName[i], argv[i] ? argv[i] : NULL);}printf(\n);return 0;
}...... ...... ...... ...... ...... ......rc sqlite3_exec(db, insert into stu values(003, li);, callback, NULL, errMsg);if( rc ! SQLITE_OK ){fprintf(stderr, SQL error: %s\n, errMsg);sqlite3_free(errMsg);}else{fprintf(stdout, Records created successfully\n);
}关于表数据的增删改查代码大同小异这里不作过多赘述…