Linux系統上sqlite3的使用操作實例
Linux系統上sqlite3的使用
一、在Linux系統上安裝sqlite3
首先更新軟件包索引:sudo apt-get update
下載安裝sqlite3:sudo apt-get install sqlite3
查看是否下載成功:sqlite3
這樣就說明安裝成功了
安裝sqlite3和安裝sqlite3依賴庫不是一個概念,安裝sqlite3依賴庫,需要執(zhí)行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、創(chuàng)建sqlite表單,其實感覺和excel表格差不多
這里sqlite3對大小寫沒有那么的敏感,所以不用刻意的區(qū)分大小寫
使用這個形式創(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框中代表這一列的數據類型,一般的數據類型有tinyint(-128~127)、int(-2147483648~2147483647)、bigint(-9223372036854775808~9223372036854775807)、real(浮點數)、text(文本)、還有很多類型需要可以去網上查詢,這里因為是存單詞,所以使用文本類型text
3框中是限制,一般填PRIMARY KEY(主鍵), 表示該列數據唯一,可以加快數據訪問、或者NOT NULL(非空), 該類數據不能為空
.table來查看表單是否創(chuàng)建成功,下圖所示,聲明我們的dictionaries表單已經創(chuàng)建成功了
.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:" 則表示創(chuàng)建內存中數據庫 */ 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、執(zhí)行sqlite3命令函數
sqlite3_exec()
函數用于在 SQLite 數據庫連接上執(zhí)行一條或多條 SQL 語句,并調用一個回調函數處理執(zhí)行結果
int sqlite3_exec( sqlite3*, /* 執(zhí)行 SQL 命令的數據庫連接 */ const char *sql, /* 待執(zhí)行的 SQL 命令 */ int (*callback)(void*,int,char**,char**), /* 在執(zhí)行命令時的回調函數 */ void *, /* 作為第一個參數傳遞給回調函數的指針 */ char **errmsg /* 用于存儲錯誤消息的指針 */ );
該函數接收一個打開的數據庫連接 sqlite3*
,待執(zhí)行的 SQL 命令 sql
,以及一個回調函數 callback
,可以選擇性地傳遞一個指向用戶數據的指針作為回調函數的第一個參數 該句話的意思是,回調函數的參數列表(簽名)決定了該函數在被調用時應接收哪些參數,并指定了它們的數據類型和順序。
int (*callback)(void*, int, char**, char**);
- 第一個參數
void*
,是使用者傳遞給sqlite3_exec()
調用的void*
參數。 - 第二個參數
int
,是查詢結果所返回的列數。 - 第三個參數
char**
,是包含每個結果集元素值的字符串數組。 - 第四個參數
char**
,是包含每個結果集元素的列名稱的字符串數組。這通常會在 SELECT 語句中返回。
3、實例應用一
創(chuàng)建表:
#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"); } ? /*創(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"); } ? /*關閉數據庫文件*/ 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"); } ? /*創(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"); } ? /*關閉數據庫文件*/ sqlite3_close(db); return 0; }
查詢數據
這里定義了一個回調函數 callback()
,該函數用于處理 sqlite3_exec()
執(zhí)行結果。
#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、創(chuàng)建數據庫實例(加載對應的驅動), 加載的共享庫位
①、QSqlDatabase, 通過這個類添加/刪除/復制/關閉數據庫實例
/*連接SQLite數據庫*/ //創(chuàng)建數據庫實例(加載對應的驅動), 加載的共享庫位 于/opt/Qt5.12.0/5.12.0/gcc_64/plugins/sqldrivers/ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //設置要使用的數據庫名稱 db.setDatabaseName("customdb");
②、連接數據庫
//連接數據庫 bool ok = db.open();
2、對數據庫進行一系列的添、刪、查、改操作(編寫并執(zhí)行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());
執(zhí)行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使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!