
よろしくお願いします。
テーブル名「TB1332」の有無を確認するSQL 文をこのようにしました
select count(*) from sqlite_master where type='table' and name='TB1332';
PupSQLite でのcount(*)の値
当該テーブルが存在する場合1
当該テーブルが存在しない場合0
このように正しい結果が得られます。
しかし、Visul Studio 2010 C++ で下記のコードを実行しますと、result の値は、テーブルの有無に関係なく、常に0となります。
int result = sqlite3_exec(pDb, "select count(*) from sqlite_master where type='table' and name='TB1332';", NULL, NULL, &err);
C/C++ で該当する、テーブル数を取得するコードの書き方を教えていただけないでしょうか。
環境
C/C++
Visual Studio 2010 Proffesional
SQLite3
PupSQLitehttps://www.eonet.ne.jp/~pup/software.html
No.2ベストアンサー
- 回答日時:
「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;
}
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;
}
No.1
- 回答日時:
テーブル名を登録した、新しいテーブルを作られてはいかがでしょうか。
基本的にテーブルはあることが前提なので、
テーブルがあるかどうか確認する処理に無理があるような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLite C/C++ でのテーブル数...
-
登録する方法
-
ビューテーブル
-
レコード集計のSQLについて
-
グループ化したいのですが
-
データファイルの縮小
-
Data Pump で大量データインポ...
-
Oracleはどの程度まで巨大なテ...
-
入力のないレコード欄を空欄(...
-
VBSのデータベース操作で、複数...
-
Windows Server 2008 EXPRESSの...
-
オプティマイザはどちらのモー...
-
CSVデータの取り込み
-
Accessの最適化について
-
OracleのCreate Table 文のStor...
-
同じSELECT文同士でのデ...
-
質問344の続きですが・・
-
"actuarial table"とは?
-
ダイレクトパスロードの性能に...
-
oracle SYSTEM01.DBF が大きい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量データの取得処理について
-
db2にて数値を3桁文字にて出力...
-
列の既定値を取得したい
-
PL/SQLでテーブル名に変数を使...
-
SQLite C/C++ でのテーブル数...
-
ACCESS2002のupdateの副問合せ...
-
ACCESSのテーブルを毎日定刻に...
-
Sybaseにてupdate時に特定のInd...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
ORA-00959: 表領域'****'は...
-
ACCESS 複数テーブル・複数フィ...
-
SQLでスキーマ名(所有者名)の...
-
異なるスキーマからデータを抽...
-
datapumpの実行方法について
-
CLOB型へのINSERT
-
テーブルからのselectにおいて...
-
Data Pump で大量データインポ...
-
postgreSQLのint型は桁数指定が...
-
INDEXの無効化
おすすめ情報