- ベストアンサー
SQLite C/C++でのテーブル数の取得
- SQLite C/C++でテーブル数を取得する方法について教えてください。
- Visual Studio 2010 C++でテーブル数を取得するコードが正しく動作しない問題が発生しています。
- PupSQLiteを使用している場合、count(*)の値が正しく取得できることが確認されています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://idocsq.net/page/514 「sqlite3_exec」の戻り値は正常終了が0で異常終了がそれ以外なので、SELECT文が正常に行われていれば常に0が返ります。 cygwin環境ですが以下のようにすれば、テーブルがあるかどうか判断できました。 #pragma comment( lib, "sqlite3.lib" ) #include <sqlite3.h> #include <stdio.h> // 抽出結果が返るコールバック関数 static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++) printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); return SQLITE_OK; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; // データベースファイルを新規生成 int rc = sqlite3_open("Sample.db", &db); rc = sqlite3_exec(db, "SELECT count(*) from sqlite_master where type='table' and name='sample'", callback, 0, &zErrMsg); // データベースを閉じる sqlite3_close(db); return 0; }
その他の回答 (1)
- tomtomtrain
- ベストアンサー率18% (11/60)
テーブル名を登録した、新しいテーブルを作られてはいかがでしょうか。 基本的にテーブルはあることが前提なので、 テーブルがあるかどうか確認する処理に無理があるような気がします。
お礼
nora1962さん。お世話になります その後当方も調べ、下記のような方法でもテーブルの有無が確認できたことを合わせて、掲示しておきます。 Visual Studio 2010 C/C++ でnora1962さんのコードも正しく検証できました。 ありがとう御座いました。 #pragma comment( lib, "sqlite3.lib" ) #include "sqlite3.h" #include <stdio.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; sqlite3_stmt *statement; int rc; // データベースファイルを新規生成 rc = sqlite3_open("Sample.db", &db); rc = sqlite3_exec(db, "CREATE TABLE 'sample' (NUM INTEGER PRIMARY KEY, NAME TEXT);", NULL, NULL, &zErrMsg ); sqlite3_prepare_v2(db, "select count(*) from sqlite_master where type='table' and name='sample';", -1, &statement, NULL); zErrMsg = sqlite3_errmsg(db); while (sqlite3_step(statement) == SQLITE_ROW) { rc = sqlite3_column_int(statement, 0); } printf("%d\n", rc); sqlite3_finalize(statement); // データベースを閉じる sqlite3_close(db); return 0; }