実行時に Objective-C を使用して SQLite3 データベース ファイルを作成しようとしています。「tblStore」というテーブルを作成しようとしています。フィールド名を「strStoreNumber」および「strStoreReg」と呼びたいです。私は iOS と SQLite が初めてなので、これを実行するための構文を見つけるのに苦労しています。テーブルを作成することに加えて、作成したテーブルをアプリバンドルに常駐させず、電話のどこかに常駐/保存するようにします。テーブルは読み取り/書き込み可能である必要があります。「ユーザーサンドボックス」と「ドキュメントディレクトリ」について読んだことがあります。2つの違いを理解しているかどうかはわかりません。理想的には、私のアプリはボタンを使用してテキスト フィールドから入力を取得します。テキストフィールドからの入力が文字列に入れられた後、
要約: 1. フィールド「strStoreNumber」と「strStoreReg」を持つ「tblStore」という名前のテーブルを作成するための Obj-C/SQLite の構文は何ですか? 2. db ファイルはどこにありますか? tblStore db ファイルを読み書きする必要があります。3. 「ユーザー サンドボックス」と「ドキュメント ディレクトリ」の違いは何ですか?
これは私が現在持っているものです:
-(IBAction)setInput:(id)sender
{
NSString *strStoreNumber;
NSString *strRegNumber;
NSString *tableName = @"tblStore";
NSString *dbStrStore = @"strStore";
NSString *dbStrReg = @"strReg";
strStoreNumber = StoreNumber.text;
strRegNumber = RegNumber.text;
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);
char *err;
NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' TEXT PRIMARY KEY, '%@' TEXT);", tableName, dbStrStore, dbStrReg];
if (sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
sqlite3_close(database);
NSAssert(0, @"Table failed to create.");
}
//...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, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber];
const char *sql = [querystring UTF8String];
NSString *szStore = nil;
NSString *szReg = nil;
sqlite3_stmt *statement = nil;
if (sqlite3_prepare_v2(database, sql, -1, &statement, 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(statement) == SQLITE_ROW)
{
szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)];
szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)];
}
}
sqlite3_finalize(statement);
lblStoreNumber.text = szStore;
lblRegNumber.text = szReg;
}
アプリを実行すると、次のエラーが発生します。
2012-05-10 14:58:38.169 CCoDBTry[355:f803] Opened sqlite database at /Users/Matt****/Library/Application Support/iPhone Simulator/5.1/Applications/5DB7A218-A0F6- 485F-B366-91FD2F9BC062/Documents/tblStore.sqlite
2012-05-10 14:58:38.307 CCoDBTry[355:f803] sql problem occured with: SELECT strStore, strReg FROM tblStore WHERE strStore = 8053 AND strReg = 4;
2012-05-10 14:58:38.308 CCoDBTry[355:f803] no such column: strStore
私は非常に新しく、試したことのいくつかを達成できなかったので、このことのいくつかを説明するために時間を割いてくれる人に感謝します. 助けてくれてどうもありがとう!