Linux系統(tǒng)上sqlite3的使用操作實(shí)例
Linux系統(tǒng)上sqlite3的使用
一、在Linux系統(tǒng)上安裝sqlite3
首先更新軟件包索引:sudo apt-get update

下載安裝sqlite3:sudo apt-get install sqlite3

查看是否下載成功:sqlite3

這樣就說明安裝成功了
安裝sqlite3和安裝sqlite3依賴庫不是一個(gè)概念,安裝sqlite3依賴庫,需要執(zhí)行sudo apt-get install libsqlite3-dev
二、sqlite3的操作指令
常用的指令
.help, 幫助信息 .database 當(dāng)前關(guān)聯(lián)的數(shù)據(jù)庫名稱 .open 打開數(shù)據(jù)庫 .tables 顯示當(dāng)前數(shù)據(jù)庫中的表名 .schema 查看數(shù)據(jù)表結(jié)構(gòu) .mode 設(shè)置顯示模式 .nullval 設(shè)置空白字段顯示的字符串 .headers on 顯示數(shù)據(jù)表的表頭 .exit 退出
這里對(duì)部分操作進(jìn)行了演示

對(duì)于更多操作可以使用.help查重
三、sqlite3的sql語句
sqlite3的使用命令很多,這里使用了最常用的幾個(gè)命令,所有的命令都以 ' ; ' 結(jié)束
1、新建一個(gè)以.db結(jié)尾的數(shù)據(jù)庫文件
使用:sqlite3 mydatebase.db

2、創(chuàng)建sqlite表單,其實(shí)感覺和excel表格差不多
這里sqlite3對(duì)大小寫沒有那么的敏感,所以不用刻意的區(qū)分大小寫
使用這個(gè)形式創(chuàng)建表單
CREATE TABLE table_name ( column_1 data_type constraints, column_2 data_type constraints, ..., column_n data_type constraints );

正如上面所說dictionaries是表單名字,
1框中代表第一列的名字是english,向下chinese代表第二列的名字
2框中代表這一列的數(shù)據(jù)類型,一般的數(shù)據(jù)類型有tinyint(-128~127)、int(-2147483648~2147483647)、bigint(-9223372036854775808~9223372036854775807)、real(浮點(diǎn)數(shù))、text(文本)、還有很多類型需要可以去網(wǎng)上查詢,這里因?yàn)槭谴鎲卧~,所以使用文本類型text
3框中是限制,一般填PRIMARY KEY(主鍵), 表示該列數(shù)據(jù)唯一,可以加快數(shù)據(jù)訪問、或者NOT NULL(非空), 該類數(shù)據(jù)不能為空
.table來查看表單是否創(chuàng)建成功,下圖所示,聲明我們的dictionaries表單已經(jīng)創(chuàng)建成功了

.schema + 表名 查看數(shù)據(jù)表結(jié)構(gòu)
3、插入數(shù)據(jù)
使用這個(gè)形式插入數(shù)據(jù)
方式一:
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、顯示數(shù)據(jù)
使用這個(gè)形式顯示數(shù)據(jù)
SELECT column_1, column_2, ..., column_n FROM table_name;
table_name是表單名

.headers on與.mode column可以改變顯示樣子
模糊查詢:
SELECT 列名1,列名2, ... FROM 表名 WHERE 列名 LIKE 模糊匹配條件;
模糊匹配通配符
%, 代表零個(gè)、一個(gè)或者多個(gè)數(shù)字或字符
_, 代表一個(gè)單一的數(shù)字或字符
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、更改數(shù)據(jù)
使用這個(gè)形式更改數(shù)據(jù)
UPDATE table_name SET column_1 = value_1, column_2 = value_2, ..., column_n = value_n WHERE condition;
這里condition是:列名=元素,表示在哪一列找到元素等于這個(gè)元素的,然后進(jìn)行更改、沒有條件表達(dá)式指定的所有列數(shù)據(jù)都被修改、多個(gè)條件可以用 and 或者 or 連接

更改之后的

6、刪除數(shù)據(jù)
使用這種格式
DELETE FROM table_name WHERE condition;
condition:沒有條件表達(dá)式刪除表中所有數(shù)據(jù)、多個(gè)條件可以用 and 或者 or 連接

7、刪除表單
采用這種形式:
DROP TABLE table_name;

8、退出
.exit
生成了數(shù)據(jù)庫了mydatebase.db

四、sqlite3常用的API(C/C++)
具體怎么使用看An Introduction To The SQLite C/C++ Interface
1、打開和關(guān)閉數(shù)據(jù)庫.db函數(shù)
打開:
int sqlite3_open(
const char *filename, /* 數(shù)據(jù)庫文件的文件名,如果為 ":memory:" 則表示創(chuàng)建內(nèi)存中數(shù)據(jù)庫 */
sqlite3 **ppDb /* 返回指向數(shù)據(jù)庫連接句柄的指針 */
);關(guān)閉:
int sqlite3_close(sqlite3*);
下面為實(shí)例代碼:
#include <stdio.h>
#include <sqlite3.h>
?
int main() {
sqlite3 *db;
/*打開數(shù)據(jù)庫*/
int rc = sqlite3_open("test.db", &db);
if (rc == SQLITE_OK) {
printf("已成功打開數(shù)據(jù)庫\n");
sqlite3_close(db); // 關(guān)閉數(shù)據(jù)庫連接
} else {
fprintf(stderr, "無法打開數(shù)據(jù)庫: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
?
return 0;
}2、執(zhí)行sqlite3命令函數(shù)
sqlite3_exec() 函數(shù)用于在 SQLite 數(shù)據(jù)庫連接上執(zhí)行一條或多條 SQL 語句,并調(diào)用一個(gè)回調(diào)函數(shù)處理執(zhí)行結(jié)果
int sqlite3_exec(
sqlite3*, /* 執(zhí)行 SQL 命令的數(shù)據(jù)庫連接 */
const char *sql, /* 待執(zhí)行的 SQL 命令 */
int (*callback)(void*,int,char**,char**), /* 在執(zhí)行命令時(shí)的回調(diào)函數(shù) */
void *, /* 作為第一個(gè)參數(shù)傳遞給回調(diào)函數(shù)的指針 */
char **errmsg /* 用于存儲(chǔ)錯(cuò)誤消息的指針 */
);該函數(shù)接收一個(gè)打開的數(shù)據(jù)庫連接 sqlite3*,待執(zhí)行的 SQL 命令 sql,以及一個(gè)回調(diào)函數(shù) callback,可以選擇性地傳遞一個(gè)指向用戶數(shù)據(jù)的指針作為回調(diào)函數(shù)的第一個(gè)參數(shù) 該句話的意思是,回調(diào)函數(shù)的參數(shù)列表(簽名)決定了該函數(shù)在被調(diào)用時(shí)應(yīng)接收哪些參數(shù),并指定了它們的數(shù)據(jù)類型和順序。
int (*callback)(void*, int, char**, char**);
- 第一個(gè)參數(shù)
void*,是使用者傳遞給sqlite3_exec()調(diào)用的void*參數(shù)。 - 第二個(gè)參數(shù)
int,是查詢結(jié)果所返回的列數(shù)。 - 第三個(gè)參數(shù)
char**,是包含每個(gè)結(jié)果集元素值的字符串?dāng)?shù)組。 - 第四個(gè)參數(shù)
char**,是包含每個(gè)結(jié)果集元素的列名稱的字符串?dāng)?shù)組。這通常會(huì)在 SELECT 語句中返回。
3、實(shí)例應(yīng)用一
創(chuàng)建表:
#include <sqlite3.h>
#include <stdio.h>
?
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
/*打開數(shù)據(jù)庫*/
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");
}
?
/*創(chuàng)建表的SQL語句*/
char *sql = "CREATE TABLE COMPANY("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL);";
?
/*執(zhí)行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");
}
?
/*關(guān)閉數(shù)據(jù)庫文件*/
sqlite3_close(db);
return 0;
}插入數(shù)據(jù)
#include <sqlite3.h>
#include <stdio.h>
?
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
?
/*打開數(shù)據(jù)庫*/
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");
}
?
/*創(chuàng)建表的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);";
?
/*執(zhí)行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");
}
?
/*關(guān)閉數(shù)據(jù)庫文件*/
sqlite3_close(db);
return 0;
}查詢數(shù)據(jù)
這里定義了一個(gè)回調(diào)函數(shù) callback(),該函數(shù)用于處理 sqlite3_exec() 執(zhí)行結(jié)果。
#include <sqlite3.h>
#include <stdio.h>
?
// 回調(diào)函數(shù)
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; // 存儲(chǔ)錯(cuò)誤消息的指針
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、實(shí)例代碼二
請(qǐng)參考基于UDP+sqlite3實(shí)現(xiàn)的單詞查詢器(Linux系統(tǒng)下)
五、QT中使用SQLite3
1、創(chuàng)建數(shù)據(jù)庫實(shí)例(加載對(duì)應(yīng)的驅(qū)動(dòng)), 加載的共享庫位
①、QSqlDatabase, 通過這個(gè)類添加/刪除/復(fù)制/關(guān)閉數(shù)據(jù)庫實(shí)例
/*連接SQLite數(shù)據(jù)庫*/
//創(chuàng)建數(shù)據(jù)庫實(shí)例(加載對(duì)應(yīng)的驅(qū)動(dòng)), 加載的共享庫位
于/opt/Qt5.12.0/5.12.0/gcc_64/plugins/sqldrivers/
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//設(shè)置要使用的數(shù)據(jù)庫名稱
db.setDatabaseName("customdb");②、連接數(shù)據(jù)庫
//連接數(shù)據(jù)庫 bool ok = db.open();
2、對(duì)數(shù)據(jù)庫進(jìn)行一系列的添、刪、查、改操作(編寫并執(zhí)行SQL語句)
QSqlQuery, 數(shù)據(jù)庫操作類
/*查詢*/
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());執(zhí)行sqlite語句
bool QSqlQuery::exec(const QString &query)
查具體的
QSqlQueryModel如果想單獨(dú)獲取查詢記錄可以使用它的record函數(shù),它有兩個(gè)重載版本。其中無參版本返回字段信息和一條空記錄,帶參版本返回字段信息和對(duì)應(yīng)的一條記錄。
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、關(guān)閉數(shù)據(jù)庫
void QSqlDatabase::close()
參考資源:https://download.csdn.net/download/2403_82436914/90755150
到此這篇關(guān)于Linux系統(tǒng)上sqlite3的使用操作實(shí)例的文章就介紹到這了,更多相關(guān)linux sqlite3使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
System.Data.SQLite 數(shù)據(jù)庫詳細(xì)介紹
System.Data.SQLite是SQLite的加強(qiáng)版,它可以無需.NET Framework支持,由于它內(nèi)部包含了一個(gè)ADO.NET 2.0引擎,所以.NET開發(fā)人員可以利用System.Data.SQLite方便地開發(fā).NET程序。2011-02-02
SQLite教程(五):索引和數(shù)據(jù)分析/清理
這篇文章主要介紹了SQLite教程(五):索引和數(shù)據(jù)分析/清理,本文講解了創(chuàng)建索引、刪除索引、重建索引、數(shù)據(jù)分析、數(shù)據(jù)清理等內(nèi)容,需要的朋友可以參考下2015-05-05
Linux系統(tǒng)下基于UDP+sqlite3實(shí)現(xiàn)的單詞查詢器(推薦)
文章介紹基于UDP協(xié)議與SQLite3數(shù)據(jù)庫實(shí)現(xiàn)的Linux單詞查詢系統(tǒng),包含服務(wù)端與客戶端代碼設(shè)計(jì),通過CSV轉(zhuǎn)DB構(gòu)建單詞表,實(shí)現(xiàn)數(shù)據(jù)查詢及日志記錄功能,采用Makefile管理源碼并展示運(yùn)行結(jié)果,感興趣的朋友一起看看吧2025-06-06
SQLite教程(十三):C語言編程實(shí)例代碼(1)
這篇文章主要介紹了SQLite教程(十三):C語言編程實(shí)例代碼(1),本文講解了獲取表的Schema信息、動(dòng)態(tài)創(chuàng)建表、刪除該表、常規(guī)數(shù)據(jù)插入、創(chuàng)建測試數(shù)據(jù)表、刪除測試表等內(nèi)容,需要的朋友可以參考下2015-05-05
基于sqlite特殊字符轉(zhuǎn)義的實(shí)現(xiàn)方法
本篇文章是對(duì)sqlite特殊字符轉(zhuǎn)義的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
SQLite 內(nèi)存數(shù)據(jù)庫學(xué)習(xí)手冊(cè)
這篇文章主要介紹SQLite 內(nèi)存數(shù)據(jù)庫的使用方法, 需要的朋友可以參考下2013-12-12

