3.SQL操作
3.1. INSERT操作
以下の手順で操作を行います。
- SQL文をコンパイルする(sqlite3_prepare)
- 値を設定する(sqlite3_bind)
- SQLを実行する(sqlite3_step)
- SQL文を破棄する(sqlite3_finalize)
イメージは:
UPDATE、DELETE、SELECTも同じ手順です。
まずデータベースオブジェクトを作成します。
sqlite3* db; int rs = sqlite3_open( "test.db", &db );
そしてSQLをコンパイルしてコンパイラステートメントを作成します。
sqlite3_stmt* stmt; rc = sqlite3_prepare( db, "INSERT INTO Names ( Name ) VALUES ( ? )", -1, &stmt, NULL );
データを挿入するため「?」を値の代わりに記入します。SQLが正しくコンパイルされた場合SQLITE_OK
の戻り値コードが返されます。それ以外の場合エラーコードが返されます。
sqlite3_bind_text16
を使用して、パラメータを渡します。
sqlite3_bind_text16( stmt, 1, "Tom", -1, SQLITE_STATIC );
1はパラメータの順番です。複数のパラメータがある場合は、1からの連番でsqlite3_bind
を使用して設定します。(詳しくはこちら)
sqlite3_step
を使用してSQLを実行する。
rc = sqlite3_step( stmt );
データが正しく保存された場合はSQLITE_DONE
の戻りコードが返されます。それ以外の場合エラーコードが返されます。(エラーコード詳細はこちら)
sqlite3_finalize
を使用してコンパイルステートメントを破棄します。
sqlite3_finalize( stmt );
sqlite3_close
を使用してデータベースをクローズします。
sqlite3_close( db );
以上でデータの挿入操作は完了します。
複数のデータを挿入する時、使用するSQL文が同じ場合は、 5.2の挿入高速化&効率化をご覧ください。
3.2. UPDATE操作
3.1.で挿入されたTomという名前をJohnに更新します。
sqlite3* db; sqlite3_open( "test.db", &db ); /* DBを開く */ /* SQLをコンパイル */ sqlite3_stmt* stmt; rc = sqlite3_prepare( db, "UPDATE Names SET name = ? WHERE name = ?", -1, &stmt ); /* パラメータ1をJohnに設定する */ sqlite3_bind_text16( stmt, 1, L"John", -1, SQLITE_STATIC ); /* パラメータ2をTomに設定する */ sqlite3_bind_text16( stmt, 2, L"Tom", -1, SQLITE_STATIC ); rc = sqlite3_step( stmt ); /* コンパイルされたSQLを実行する */ sqlite3_finalize( stmt ); /* コンパイルステートメントを破棄する */ sqlite3_close( db ); /* データベースをクローズする */
3.3. DELETE操作
3.2.で更新したJohnという名前を削除します。
sqlite3* db; sqlite3_open( "test.db", &db ); /* DBを開く */ sqlite3_stmt* stmt; rc = sqlite3_prepare( db, "DELETE FROM Names where name = ?", -1, &stmt ); /* SQLをコンパイル */ /* パラメータ1をJohnに設定する */ sqlite3_bind_text16( stmt, 1, "John", -1, SQLITE_STATIC ); /* コンパイルされたSQLを実行する */ rc = sqlite3_step( stmt ); sqlite3_finalize( stmt ); /* コンパイルステートメントを破棄する */ sqlite3_close( db ); /* データベースをクローズする */
3.4. SELECT操作
sqlite3* db; sqlite3_open( "test.db", &db ); /* DBを開く */ /* SQLをコンパイル */ sqlite3_stmt* stmt; int rc = sqlite3_prepare( db, "SELECT name FROM Names", -1, &stmt );
SQLを実行します。
while( ( rc = sqlite3_step( stmt ) ) == SQLITE_ROW ) { /*sqlite3_columnを使用して番号で指定したカラムの値を取得する*/ TCHAR* szName = (TCHAR*)sqlite3_column_text16( stmt, 0 ); m_wndNameList.AddString( szName ); /* 取得した名前をリストに追加する */ } sqlite3_finalize( stmt ); /* コンパイルステートメントを破棄する */ sqlite3_close( db ); /* データベースをクローズする */
2 thoughts to “SQLite使用説明(VC++言語)(2)”