2012-03-24 6 views
0

私はsqliteデータベースで使用するためのいくつかのユーティリティを作ろうとしています。そのために 私はsqlite3_ut.hとsqlite3_ut.cファイルを作成C、どのようにsqlite3データベースハンドルを転送する

sqlite_ut.h

#ifndef sqlite3_ut_h 
#define sqlite3_ut_h 

#include <stdio.h> 
#include "sqlite3.h" 

int drop_table(sqlite3 handle); 

#endif 

sqlite_ut.c

int drop_table(sqlite3 handle) 
{ 
int dropped = 0; 
printf("Begin Drop\n"); 

sqlite3_exec(handle, "BEGIN;", NULL, NULL, NULL); 
sqlite3_stmt *droptab; 
if (sqlite3_prepare_v2(handle, "DROP TABLE mytable;", -1, &droptab, 0) != SQLITE_OK) 
    printf("db error: %s\n", sqlite3_errmsg(handle)); 

if(droptab) 
{ 
    sqlite3_step(droptab); 
    dropped = 1; 
} 
else 
    printf("Error: drop_table"); 

sqlite3_finalize(droptab); 
sqlite3_exec(handle, "COMMIT;", NULL, NULL, NULL); 

printf("End Drop\n"); 
return dropped; 
} 

sqlite_ut.hはメインファイルに含まれています。

sqlite3 *db; 

int rc = sqlite3_open("m_test.db", &db); 
if (rc)... 

//error here 
int dropped = drop_table(db); 

もちろん、開かれたデータベースのハンドルを、sqlite3タイプのdrop_table関数に正しく転送することはできません。

提案するプログラムの設定でそれを行うにはどうすればいいですか?

+0

どうしたのですか?エラーが出ますか? –

+0

ヘイジョー。私はここに状況があります。表示されているcヘッダとcファイルを使ってC++プログラムをコンパイルすると、 '定義されていない参照'というメッセージが表示されます。何をすべきか? –

答えて

2

SQLite3ハンドルはsqlite3 *であり、sqlite3ではありません。次のようにdrop_tableを再定義してください。

int drop_table(sqlite3 *handle) { … } 
+0

ありがとうございます。私はすぐにこれを試すことが可能になります:) –

関連する問題