欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux系統上sqlite3的使用操作實例

 更新時間:2025年06月16日 10:20:32   作者:SELSL  
本文介紹了Linux下sqlite3的安裝、基本操作指令、SQL語句使用、C/C++?API調用及QT集成方法,涵蓋數據庫創(chuàng)建、表結構定義、數據增刪改查、API執(zhí)行與回調機制等內容,對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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 為SQLite3提供一個ANSI到UTF8的互轉函數

    為SQLite3提供一個ANSI到UTF8的互轉函數

    這篇文章主要為大家分享下ANSI與UTF8的互轉函數,需要的朋友可以收藏下
    2013-12-12
  • SQLite3的綁定函數族使用與其注意事項詳解

    SQLite3的綁定函數族使用與其注意事項詳解

    這篇文章主要介紹了SQLite3的綁定函數族使用與其注意事項的相關資料,文中通過示例代碼介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • SQLite教程(一):SQLite數據庫介紹

    SQLite教程(一):SQLite數據庫介紹

    這篇文章主要介紹了SQLite教程(一):SQLite數據庫介紹,本文講解了什么是SQLite、SQLite的主要優(yōu)點、和RDBMS相比SQLite的一些劣勢、個性化特征等內容,需要的朋友可以參考下
    2015-05-05
  • SQLite3中的日期時間函數使用小結

    SQLite3中的日期時間函數使用小結

    這篇文章主要介紹了SQLite3中的日期時間函數使用小結,同時介紹了一些SQLite數據庫的基本知識,需要的朋友可以參考下
    2014-05-05
  • SQLite教程(十一):臨時文件

    SQLite教程(十一):臨時文件

    這篇文章主要介紹了SQLite教程(十一):臨時文件,本文講解了七種臨時文件并對它們一一具體說明,并相關的編譯時參數和指令、其它優(yōu)化策略等內容,需要的朋友可以參考下
    2015-05-05
  • 保護你的Sqlite數據庫(SQLite數據庫安全秘籍)

    保護你的Sqlite數據庫(SQLite數據庫安全秘籍)

    相信使用PHP開發(fā)的人員一定不會對SQLite感到陌生了,PHP5已經集成了這個輕量型的數據庫。并且很多虛擬主機無論是win還是*nux都支持它。
    2011-08-08
  • SQLite字符串比較時的大小寫問題解決方法

    SQLite字符串比較時的大小寫問題解決方法

    這篇文章主要介紹了SQLite字符串比較時的大小寫問題解決方法,本文總結了比較字符串時的大小寫問題的3種解決方案,需要的朋友可以參考下
    2015-03-03
  • sqlite時間戳轉時間語句(時間轉時間戳)

    sqlite時間戳轉時間語句(時間轉時間戳)

    這篇文章主要介紹了sqlite時間戳轉時間、時間轉時間戳的方法,需要的朋友可以參考下
    2014-06-06
  • SQLite優(yōu)化方法

    SQLite優(yōu)化方法

    SQLite的數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很好時的過程,會極大地影響數據庫存取的速度。
    2008-09-09
  • SQLite數據庫安裝及基本操作指南

    SQLite數據庫安裝及基本操作指南

    SQLite 是一個開源的嵌入式關系數據庫,實現自包容、零配置、支持事務的SQL數據庫引擎。 其特點是高度便攜、使用方便、結構緊湊、高效、可靠。今天我們主要來講解下SQLite數據庫的安裝以及基本操作指南
    2014-08-08

最新評論