テキストフィールドからの入力を受け取り、それを文字列に変換するアプリケーションを開発中です。私は、データベースのフィールドの値との入力から文字列の値をチェックするフィールドを持つテーブルを持っています。私はiOSには新しく、SQLiteはかなり新しいです。データベースが見つかりません... iOS/SQLite
コード:
-(IBAction)setInput:(id)sender
{
NSString *strStoreNumber;
NSString *strRegNumber;
strStoreNumber = StoreNumber.text;
strRegNumber = RegNumber.text;
lblStoreNumber.text = strStoreNumber;
lblRegNumber.text = strRegNumber;
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths lastObject];
// NSString* databasePath = [documentsDirectory stringByAppendingPathComponent:@"tblStore.sqlite"];
NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSLog(@"Opened sqlite database at %@", databasePath);
//...stuff
}
else
{
NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database));
sqlite3_close (database);
}
NSString *querystring;
// create your statement
querystring = [NSString stringWithFormat:@"SELECT strStore FROM tblStore WHERE strStore = %@;", strStoreNumber];
const char *sql = [querystring UTF8String];
NSString *szStore = nil;
NSString *szReg = nil;
if (sqlite3_prepare_v2(database, sql, -1, &databasePath, NULL)!=SQLITE_OK) //queryString = Statement
{
NSLog(@"sql problem occured with: %s", sql);
NSLog(@"%s", sqlite3_errmsg(database));
}
else
{
// you could handle multiple rows here
while (sqlite3_step(databasePath) == SQLITE_ROW) // queryString = statement
{
szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(databasePath, 0)];
szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(databasePath, 1)];
} // while
}
sqlite3_finalize(databasePath);
// Do something with data...
}
それはライン "のNSLog(@" %の@にsqliteのデータベースをオープンになる "DatabasePathに);"、それがデータベースへのアクセス権を持っているかのように見えます。しかし、私はアプリを実行すると、私は "NSLog(@ SQLの問題が発生した:%s"、SQL); "エラー、私はコンソールで見ることができます。さらに、コンソールに「No such table:tblStore」と表示されます。
FirefoxのアドオンSQLiteマネージャを使用してテーブルを作成しました。私はプロジェクトにsqlite3ライブラリを追加しました。私はSQLiteマネージャーで作成したデータベーステーブルを自分のプロジェクトに、2つのAppDelegateファイルと2つのViewControllerファイルの上にドラッグアンドドロップしました。
ご迷惑をおかけして申し訳ございません。ありがとう!
EDIT:プロジェクトにファイルを正しく追加しました。テーブルが見つかったかのように表示されます。今でも、私はいくつかの奇妙な警告を持っている:
この警告は、次のように表示される「互換性のないポインタ型は 『sqlite3_stmtの*』(別名 『構造体sqlite3_stmt *』)タイプのパラメータに 『のconstのchar *』を渡します」コード行:
if (sqlite3_prepare_v2(database, sql, -1, &databasePath, NULL)!=SQLITE_OK)
while (sqlite3_step(sql) == SQLITE_ROW)
szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(sql, 0)];
szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(sql, 1)];
sqlite3_finalize(sql);
「sql」とは関係がありますが、わかりません。助言がありますか?
Core Dataを検討する価値はありません。 – runmad
提案をいただきありがとうございますが、CoreDataを使用することは私の選択ではありません。私はSQLiteを使用するよう指示されています。ありがとう! – Skizz
申し訳ありませんが、コアデータはかなり素晴らしいです:)それはあなたがsqliteデータベースをインポートすることができます。がんばろう。 – runmad