linux系统上sqlite3的使用
一、在linux系统上安装sqlite3
首先更新软件包索引:sudo apt-get update
下载安装sqlite3:sudo apt-get install sqlite3
查看是否下载成功:sqlite3
这样就说明安装成功了
安装sqlite3和安装sqlite3依赖库不是一个概念,安装sqlite3依赖库,需要执行sudo apt-get install libsqlite3-dev
二、sqlite3的操作指令
常用的指令
.help, 帮助信息 .database 当前关联的数据库名称 .open 打开数据库 .tables 显示当前数据库中的表名 .schema 查看数据表结构 .mode 设置显示模式 .nullval 设置空白字段显示的字符串 .headers on 显示数据表的表头 .exit 退出
这里对部分操作进行了演示
对于更多操作可以使用.help查重
三、sqlite3的sql语句
sqlite3的使用命令很多,这里使用了最常用的几个命令,所有的命令都以 ' ; ' 结束
1、新建一个以.db结尾的数据库文件
使用:sqlite3 mydatebase.db
2、创建sqlite表单,其实感觉和excel表格差不多
这里sqlite3对大小写没有那么的敏感,所以不用刻意的区分大小写
使用这个形式创建表单
create table table_name ( column_1 data_type constraints, column_2 data_type constraints, ..., column_n data_type constraints );
正如上面所说dictionaries是表单名字,
1框中代表第一列的名字是english,向下chinese代表第二列的名字
2框中代表这一列的数据类型,一般的数据类型有tinyint(-128~127)、int(-2147483648~2147483647)、bigint(-9223372036854775808~9223372036854775807)、real(浮点数)、text(文本)、还有很多类型需要可以去网上查询,这里因为是存单词,所以使用文本类型text
3框中是限制,一般填primary key(主键), 表示该列数据唯一,可以加快数据访问、或者not null(非空), 该类数据不能为空
.table来查看表单是否创建成功,下图所示,声明我们的dictionaries表单已经创建成功了
.schema + 表名 查看数据表结构
3、插入数据
使用这个形式插入数据
方式一:
insert into table_name (column_1, column_2, ..., column_n) values (value_1, value_2, ..., value_n);
方式二:
insert into table_name values(value_1, value_2...);
例子:
insert into dictionaries (english, chinese)values('main', '主要的,最大的');
english与chinese是每一列的名字
4、显示数据
使用这个形式显示数据
select column_1, column_2, ..., column_n from table_name;
table_name是表单名
.headers on与.mode column可以改变显示样子
模糊查询:
select 列名1,列名2, ... from 表名 where 列名 like 模糊匹配条件;
模糊匹配通配符
%, 代表零个、一个或者多个数字或字符
_, 代表一个单一的数字或字符
select * from employee where ein like "1%" ; select * from employee where name like "黄%" ; select * from employee where name like "黄_" ; select * from employee where ein like "1_2%" ;
5、更改数据
使用这个形式更改数据
update table_name set column_1 = value_1, column_2 = value_2, ..., column_n = value_n where condition;
这里condition是:列名=元素,表示在哪一列找到元素等于这个元素的,然后进行更改、没有条件表达式指定的所有列数据都被修改、多个条件可以用 and 或者 or 连接
更改之后的
6、删除数据
使用这种格式
delete from table_name where condition;
condition:没有条件表达式删除表中所有数据、多个条件可以用 and 或者 or 连接
7、删除表单
采用这种形式:
drop table table_name;
8、退出
.exit
生成了数据库了mydatebase.db
四、sqlite3常用的api(c/c++)
具体怎么使用看an introduction to the sqlite c/c++ interface
1、打开和关闭数据库.db函数
打开:
int sqlite3_open( const char *filename, /* 数据库文件的文件名,如果为 ":memory:" 则表示创建内存中数据库 */ sqlite3 **ppdb /* 返回指向数据库连接句柄的指针 */ );
关闭:
int sqlite3_close(sqlite3*);
下面为实例代码:
#include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; /*打开数据库*/ int rc = sqlite3_open("test.db", &db); if (rc == sqlite_ok) { printf("已成功打开数据库\n"); sqlite3_close(db); // 关闭数据库连接 } else { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } return 0; }
2、执行sqlite3命令函数
sqlite3_exec()
函数用于在 sqlite 数据库连接上执行一条或多条 sql 语句,并调用一个回调函数处理执行结果
int sqlite3_exec( sqlite3*, /* 执行 sql 命令的数据库连接 */ const char *sql, /* 待执行的 sql 命令 */ int (*callback)(void*,int,char**,char**), /* 在执行命令时的回调函数 */ void *, /* 作为第一个参数传递给回调函数的指针 */ char **errmsg /* 用于存储错误消息的指针 */ );
该函数接收一个打开的数据库连接 sqlite3*
,待执行的 sql 命令 sql
,以及一个回调函数 callback
,可以选择性地传递一个指向用户数据的指针作为回调函数的第一个参数 该句话的意思是,回调函数的参数列表(签名)决定了该函数在被调用时应接收哪些参数,并指定了它们的数据类型和顺序。
int (*callback)(void*, int, char**, char**);
- 第一个参数
void*
,是使用者传递给sqlite3_exec()
调用的void*
参数。 - 第二个参数
int
,是查询结果所返回的列数。 - 第三个参数
char**
,是包含每个结果集元素值的字符串数组。 - 第四个参数
char**
,是包含每个结果集元素的列名称的字符串数组。这通常会在 select 语句中返回。
3、实例应用一
创建表:
#include <sqlite3.h> #include <stdio.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zerrmsg = 0; int rc; /*打开数据库*/ rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } else { fprintf(stdout, "opened database successfully\n"); } /*创建表的sql语句*/ char *sql = "create table company(" "id int primary key not null," "name text not null," "age int not null);"; /*执行sql语句*/ rc = sqlite3_exec(db, sql, 0, 0, &zerrmsg); if (rc != sqlite_ok) { fprintf(stderr, "sql error: %s\n", zerrmsg); sqlite3_free(zerrmsg); } else { printf("table created successfully\n"); } /*关闭数据库文件*/ sqlite3_close(db); return 0; }
插入数据
#include <sqlite3.h> #include <stdio.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zerrmsg = 0; int rc; /*打开数据库*/ rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } else { fprintf(stdout, "opened database successfully\n"); } /*创建表的sql语句*/ char *sql = "insert into company (id,name,age) values (1, '张三', 32);" "insert into company (id,name,age) values (2, '李四', 33);" "insert into company (id,name,age) values (3, '王五', 30);" "insert into company (id,name,age) values (4, '王博', 32);" "insert into company (id,name,age) values (5, '李为', 33);" "insert into company (id,name,age) values (6, '赵倩', 30);"; /*执行sql语句*/ rc = sqlite3_exec(db, sql, 0, 0, &zerrmsg); if (rc != sqlite_ok) { fprintf(stderr, "sql error: %s\n", zerrmsg); sqlite3_free(zerrmsg); } else { fprintf(stdout, "records created successfully\n"); } /*关闭数据库文件*/ sqlite3_close(db); return 0; }
查询数据
这里定义了一个回调函数 callback()
,该函数用于处理 sqlite3_exec()
执行结果。
#include <sqlite3.h> #include <stdio.h> // 回调函数 int callback(void *data, int argc, char **argv, char **azcolname) { int i; printf("callback:\n"); for(i = 0; i < argc; i++) { printf("%s = %s\n", azcolname[i], argv[i] ? argv[i] : "null"); } printf("\n"); return 0; } int main () { sqlite3 *db; char *zerrmsg = 0; // 存储错误消息的指针 int rc; rc = sqlite3_open("test.db", &db); if (rc != sqlite_ok) { fprintf(stderr, "can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } const char* sql = "select * from company"; rc = sqlite3_exec(db, sql, callback, null, &zerrmsg); if (rc != sqlite_ok) { fprintf(stderr, "sql error: %s\n", zerrmsg); sqlite3_free(zerrmsg); } else { printf("operation done successfully\n"); } sqlite3_close(db); return rc; }
4、实例代码二
请参考基于udp+sqlite3实现的单词查询器(linux系统下)
五、qt中使用sqlite3
1、创建数据库实例(加载对应的驱动), 加载的共享库位
①、qsqldatabase, 通过这个类添加/删除/复制/关闭数据库实例
/*连接sqlite数据库*/ //创建数据库实例(加载对应的驱动), 加载的共享库位 于/opt/qt5.12.0/5.12.0/gcc_64/plugins/sqldrivers/ qsqldatabase db = qsqldatabase::adddatabase("qsqlite"); //设置要使用的数据库名称 db.setdatabasename("customdb");
②、连接数据库
//连接数据库 bool ok = db.open();
2、对数据库进行一系列的添、删、查、改操作(编写并执行sql语句)
qsqlquery, 数据库操作类
/*查询*/ qsqlquery query("select * from artist"); int fieldno = query.record().indexof("country"); while (query.next()) { qstring country = query.value(fieldno).tostring(); dosomething(country); }
/*插入*/ qsqlquery query; query.prepare("insert into person (id, forename, surname) " "values (:id, :forename, :surname)"); query.bindvalue(":id", 1001); query.bindvalue(":forename", "bart"); query.bindvalue(":surname", "simpson"); query.exec(); /*也可以自行拼接字符串*/ qsqlquery query; query.exec("insert into employee (id, name, salary) " "values (1001, 'thad beaumont', 65000)");
//删除 qsqlquery query; /*query.prepare("delete from employee where id = :id"); query.bindvalue(":id", id);*/ qstring del = qstring("delete from employee where id = %1").arg(id);
//修改 qsqlquery query; qstring sql=qstring("update stuinfo set age=%1 ,score=%2 where num=%3 or name='%4';") .arg(ui->lineedit_age->text()) .arg(ui->lineedit_score->text()) .arg(ui->lineedit_num->text()) .arg(ui->lineedit_name->text());
执行sqlite语句
bool qsqlquery::exec(const qstring &query)
查具体的
qsqlquerymodel如果想单独获取查询记录可以使用它的record函数,它有两个重载版本。其中无参版本返回字段信息和一条空记录,带参版本返回字段信息和对应的一条记录。
rec = model.record(2); for(int i=0; i<rec.count(); i++){ //qdebug()<<rec.fieldname(i); qdebug()<<rec.field(i).type()<<": "<< rec.field(i).name(); qdebug()<<rec.value(i); }
3、关闭数据库
void qsqldatabase::close()
参考资源:https://download.csdn.net/download/2403_82436914/90755150
到此这篇关于linux系统上sqlite3的使用操作实例的文章就介绍到这了,更多相关linux sqlite3使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论