0

したがって、最初のテーブルに次のステートメントを使用して、問題なくデータベースを作成できます。

     const char *sqlStatement = "CREATE TABLE IF NOT EXISTS LIBRARY_SEARCH (SEARCH_ID INTEGER PRIMARY KEY AUTOINCREMENT, SEARCH_TERM TEXT)";

しかし、行を挿入しようとすると失敗します。これが行を挿入する方法です。

NSString *insertStatement = [NSString stringWithFormat:@"INSERT INTO LIBRARY_SEARCH(SEARCH_TERM) VALUES (\"%@\")", myQuery] ;

myQuery は、アプリ内の searchBar.text の値を保持する NSString です。それはプロパティであり、もちろん合成されています。

だから私はこれを呼び出します:

     if ( sqlite3_exec(searchSessionDB, [insertStatement UTF8String], NULL, NULL, &insert_error) == SQLITE_OK)

これは失敗します。誰でも理由がわかりますか?

4

3 に答える 3

4

とった。私のオープンデータベースステートメントに小さなタイプミスをしました。

将来これを見ている人にとって、これは冒頭陳述が今どのように見えるかです(そしてそれはうまくいきます!):

if(sqlite3_open(dbpath, &searchSessionDB) = SQLITE_OK){

このNSLogを提案してくれたRobertRyanに感謝します。

NSLog(@"%s", sqlite3_errmsg(searchSessionDB));

そして、ラッパー/アプリバンドル情報を提供してくれたElpskとH2CO3に感謝します。

于 2012-07-30T12:21:34.237 に答える
2

データベースのクエリにはFMDBを使用することをお勧めします。

これはsqliteのラッパーであり、使いやすく、簡単で、すべてのエラーがより適切に説明されています

于 2012-07-30T12:00:55.860 に答える
2

アプリ バンドルにある SQLite データベースを更新しようとしているに違いありません。できません: アプリ独自のバンドルに書き込むことはできません。データベース ファイルをアプリ サンドボックスの Documents または Library ディレクトリにコピーします。

その他: OO SQLite ラッパーをお探しの場合は、の をチェックしてください。

于 2012-07-30T12:04:02.773 に答える