sqlite3 データベース操作

目次

1.SQL コマンド

1. システムコマンド

2. 共通コマンド 

(1) テーブルの作成・削除

(2) 記録の追加・削除・修正・確認

(3)列の追加・削除

(4) 主キーの設定

2. 共通 API

1.機能

(1) データベースを開く

(2) データベースを閉じる

(3) sql コマンドを実行する

(4) データベースからのクエリ結果

(5) リリースメモリー

2.注意する

要約する


1.SQL コマンド

        コマンドは、システム コマンド ('.' で始まるコマンド。通常、現在のデータベースを操作するために使用されます) と共通コマンド (';' で終わるコマンド。通常、データベース内のテーブルを操作するために使用されます) に分けられます。

1. システムコマンド

        以下は、sqlite3 システム コマンドです。 

.backup ?DB? FILE このデータベースをデータベース/ファイル形式としてバックアップします.bail
ON|OFF エラー発生時に停止します (デフォルトはオフ)
.databases データ情報 (名前とパス) を一覧表示します
.dump ?TABLE? ... with Downloadテキスト形式のデータベース (TABLE が選択されている場合、対応するテーブルのみがダウンロードされます)
.echo ON|OFF コマンド ラインをオンまたはオフにしますecho.exit
プログラムを終了します。
header.help

ヘルプ情報を表示
. import FILE TABLE ファイル FILE をデータベースにインポート
table.indices ?TABLE? インデックス名を表示(テーブル名指定時はテーブルのインデックスを表示)
.mode MODE ?TABLE? 出力を設定モード:
                            csv カンマ区切りの
                            列を左揃え
                            html HTML コード
                            挿入 SQL 挿入テーブル ステートメント
                            行 1 行に 1 つの値
                            リスト セット文字列区切り
                            タブ セット テーブル区切り
                            tcl TCL リスト element.quit
終了 program.restore
?DB? FILE データベースの復元または FILE
.schema ?TABLE? リスト データベース すべての構造tables (テーブル名がある場合はテーブル構造のみ表示)
.show 現在の出力モード設定の値を表示.tables
?TABLE? テーブル名を一覧表示 (テーブル名がある場合はテーブルの有無のみ確認)
.timeout MS to Try to try the table in milliseconds
. width NUM NUM ... 出力モードの列に対応する列幅を設定します

2. 共通コマンド 

         ここでは主に、テーブルの作成・削除、レコードの追加・削除・修正・確認、列の追加・削除、主キーの設定について説明します。

(1) テーブルの作成・削除

1. テーブルを作成する

        create table table name (フィールド名 1 フィールド タイプ、フィールド名 2 フィールド タイプ、....);

        例:テーブルの作成 TestTable(id int, name char, age int);

        注: 文字と文​​字列のタイプは、char または text として指定されます

2. テーブルを削除する

        テーブルのテーブル名を削除します。

        例:ドロップテーブルTestTable;

(2)記録の追加・削除・修正・確認

1.レコードを追加する

        テーブル名の値に挿入します (フィールド値 1、フィールド値 2、...);

        例:insert into TestTable values(1, 'Shimenglong', 25);

        注: このメソッドは、テーブル内のフィールド名に従って順番に値を割り当てる必要があり、各フィールドは省略できません

        例:insert into TestTable(id, name) values(2, 'Chen');     

        注: このメソッドでは、一部のフィールド値が指定されない場合があり、指定されていないフィールドには値が割り当てられない場合があります 

                

2. 記録を探す

        select <find item> from table name <where search condition>;

        例: select * from TestTable; (すべてのレコードを検索)

               select * from TestTable where id=1; (シンボル条件のレコードを検索) 

               select name from TestTable where id=2 and name='Chen'; (文字列は引用符で囲む必要があります)

               name='Shimenglong' または age=20 の TestTable から ID を選択します。

               select id,name from TestTable; (クエリ ID と名前のみ)

        注: .headers on (表示リスト名) .mode 列 (列ごとにコンテンツを表示) でレコードを表示できます。

3. 記録を削除する

        検索条件のテーブル名から削除します。

        例:name='Shimenglong'; の TestTable から削除します。   

4.記録を更新する

        テーブル名セット置換項目検索条件を更新します。

        update TestTable set age=25 where name='Chen';

(3)列の追加・削除

1.列を追加する

        テーブル テーブル名を変更し、列フィールド フィールド タイプを追加します。

        例:alter table TestTable add column Address text;

2.列を削除する

        注: sqlite3 では、列を直接削除することはできません。最初に新しいテーブルを作成し、古いテーブルを削除して、新しいテーブルの名前を変更する必要があります。

        例: create table TestTableBak as select id , name from TestTable ; (新しいテーブルを作成)

               drop table TestTable ; (古いテーブルを削除)

               alter table TestTableBak rename to TestTable ; (新しいテーブルの名前を古いテーブルに変更)

(4)主キーの設定

データベースの主キー

        注: 主キーとして設定されたフィールドは繰り返すことができず、主キーはデータベースの作成時に設定されます

        テーブル table name (フィールド フィールド タイプ 主キー) を作成します。

        例:Create table TestTableBak (id int primary key);

2. 共通 API

1.機能

(1) データベースを開く

        原型:int sqlite3_open( const char *pFilename, sqlite3 **pDb ); 

       パラメータ:

                pFilename: データベース名;

                pDb: データベースを操作するためのポインタ。

        戻り値: 成功すると SQLITE_OK が返され、失敗すると error_code がリセットされ、エラー情報は sqlite3_errmsg から取得できます。

        例:

    sqlite3 *db;
    if(sqlite3_open("testDB.db", &db) != SQLITE_OK)
    {
        printf("错误:%s\n", sqlite3_errmsg(db));
        exit(1);
    }

(2) データベースを閉じる

        原型:int sqlite3_close(sqlite3* pDb);

        パラメータ:

                pDb: データベースを操作するためのポインタ。

        戻り値: 成功すると SQLITE_OK が返され、失敗すると error_code がリセットされ、エラー情報は sqlite3_errmsg から取得できます。

       例:

sqlite3_close(db);

(3) sql コマンドを実行する

        原型:int sqlite3_exec(sqlite3* pDb,const char *pSql,int (*callback)(void*,int,char**,char**), void *pArg, char **pzErrmsg );

        パラメータ:

                pDb: データベースへのポインタ

                pSql: 実行する sql コマンド

                コールバック: コールバック関数。ステートメントをクエリする場合のみ、パラメーターをコールバック関数に渡します。

        原型:int (*callback)(void* arg ,int ncolumn ,char** f_value,char** f_name) ;

        機能: クエリ結果を取得します。sqlite3_exec がクエリを実行すると、複数のレコードを取得でき、sqlite3_exec はレコードの数に応じてコールバック関数を複数回呼び出します. コールバック関数は、sqlite3_exec がクエリしたレコードの行の内容のみを毎回取得します.

        パラメータ:

                arg: コールバック関数に渡されるパラメーター

                ncolumn: レコードに含まれるフィールドの列番号 

                f_value: 各フィールド値を保持するポインターの配列

                f_name: 各フィールド名を保持するポインタの配列

        戻り値: 成功: 0; 失敗: 0 以外

                pArg: コールバックのパラメーターを渡す

                pzErrmsg: エラーメッセージのアドレス

        戻り値: 成功すると SQLITE_OK が返され、失敗すると error_code がリセットされ、エラー情報は sqlite3_errmsg から取得できます。

        例:

                SQL コマンドを実行する

    sprintf(sql, "create table %s(id int, name char)", "test");
    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
        printf("错误:创建%s表失败<%s>\n", "test", errmsg);
    else 
        printf("成功:创建%s表成功\n", "test");

                コールバック関数を実行してデータを見つける

int callback(void *arg, int ncolumn, char **text, char **name)
{
    printf("查询结果: column = %d\n", ncolumn);
    printf("id = %s, name = %s\n", text[0], text[1]);
    return 0;
}

void get_message(sqlite3 *db)
{
    char sql[128] = {0};
    char *errmsg;

    sprintf(sql, "select * from %s", "test");
    if(sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK)
        printf("错误:查询%s表失败<%s>\n", "test", errmsg);
    else 
        printf("成功:查询%s表成功\n", "test");
}

(4) データベースからのクエリ結果

        原型:int sqlite3_get_table( sqlite3 *pDb, const char *pSql, char ***pazResult, int *pnRow, 

                         int *pnColumn, char **pzErrmsg );

        パラメータ:

                pDb: データベース操作ハンドル

                pSql: データベースの sql ステートメント

                pazResult: クエリの結果(関数内に新たにメモリ格納クエリ情報結果が作成されており、ここにchar**型ポインタ変数のアドレスが渡せる)

                pnRow: クエリ条件を満たす行の数、フィールド名を含まない行

                pnColumn: クエリ条件を満たす列の数

                pzErrmsg: エラーメッセージ

        戻り値: 成功した場合は 0 を返し、失敗した場合は error_code をリセットします。sqlite3_errmsg を通じてエラー情報を取得できます。

        例:

void get_table(sqlite3 *db)
{
    char sql[128] = {0};
    char **ret;
    int nrow, ncolumn;
    char *errmsg;

    sprintf(sql, "select * from %s where id = 1", "test");
    if(sqlite3_get_table(db, sql, &ret, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
        printf("错误:查询%s表失败<%s>\n", "test", errmsg);

    printf("row= %d, colum = %d\n", nrow, ncolumn);
    int i, j, n = 0;
    for(i = 0; i < nrow + 1; i++)
    {
        for(j = 0; j < ncolumn; j++)
            printf("%-15s", ret[n++]);
        putchar(10);
    }
}

(5) リリースメモリー

        原型:void sqlite3_free_table(char **pzResult);

       パラメータ:

                pzResult: sqlite3_get_table 関数を呼び出すときに、クエリ情報用のストレージ スペースを適用します。

2.注意する

        sqlite3 API を使用する場合、ヘッダー ファイルの追加に加えて、コンパイル時に動的ライブラリに接続するために「-lsqlite3」を追加する必要があります。そうしないと、コンパイルで「collect2: エラー: ld が 1 終了ステータスを返しました」のようなエラーが報告されます。 .


要約する

        以上が今日お話ししたいことですが、この記事ではsqlite3の使い方を簡単に紹介しただけで、sqlite3にはデータを素早く便利に処理できる関数やメソッドがたくさん用意されています。

おすすめ

転載: blog.csdn.net/q28292929/article/details/128535632
おすすめ