2012-06-29 53 views
0

剛剛在iPhone中使用SQLite。我已經使用谷歌,並獲得有關SQLite for iPhone的一些信息。我已經從here下載了示例源代碼。我添加的代碼來創建表像之下,如何在iPhone中使用SQLite?

database = [FMDatabase databaseWithPath:path]; 
[database open]; 
[database executeUpdate:@"create table test(name text, message text)"]; 

,我已經用下面的代碼在表中插入值:

NSString *nameStr = nameText.text; 
    NSString *messageStr = ageText.text; 

    NSString *executeQuery = [NSString stringWithFormat:@"insert into test values ('%@', '%@')",nameStr, messageStr]; 
    NSLog(@"Execute Query : %@", executeQuery); 
    //[database executeUpdate:executeQuery]; 

    [database executeUpdate:@"insert into test(name, message) values(?,?)", nameStr,messageStr,nil]; 

但是,應用程序越來越崩潰行[database executeUpdate:@"insert into test(name, message) values(?,?)", nameStr,messageStr,nil];我可以沒有得到這次事故的確切原因。

如果我們在iPhone中使用FMDatabase是安全的並且它對iPhone應用程序更可取?任何人都可以幫助解決這些問題嗎?提前致謝。

+0

什麼是崩潰日誌? –

+0

@OmarAbdelhafith謝謝。調試器控制檯中除了這些日誌外沒有任何內容顯示2012-06-29 16:32:19.140 SQLiteSampleApp [5697:207]名稱:ABCD 2012-06-29 16:32:19.140 SQLiteSampleApp [5697:207]消息:您好: 2012-06-29 16:32:19.141 SQLiteSampleApp [5697:207]執行查詢:插入到creagx值('ABCD','Hello')。你能幫我麼?謝謝。 – Gopinath

+0

而不是你的executeUpdate,添加[db executeQuery:@「select * from creagx」],它會崩潰嗎? –

回答

0

使用此代碼

database = [FMDatabase databaseWithPath:path]; 
[database open]; 
[database executeUpdate:@"create table test(name text, message text)"]; 
[database beginTransaction]; 

NSString *executeQuery = [NSString stringWithFormat:@"INSERT INTO test (name, message) VALUES (\"%@\", \"%@\")",@"Yuva", @"Hi there",nil]; 
NSLog(@"Execute Query : %@", executeQuery); 
[database executeUpdate:executeQuery]; 
[database commit]; 
+0

不要使用stringWithFormat! – ccgus

+0

你是對的,我在聊天時和他解決了。所以我沒有審查他的代碼 –

1

那裏使用FMDB正確的方法的文檔,並使用stringWithFormat:不是吧: https://github.com/ccgus/fmdb(搜索「不應該這樣做」)。

相反,你想要做這樣的事情:

database = [FMDatabase databaseWithPath:path]; 
[database open]; // FIXME check the return value 
[database executeUpdate:@"create table test(name text, message text)"]; // FIXME check for an error 
// since we're only performing a single update, there's no need for a transaction 
[executeUpdate:@"INSERT INTO test (name, message) VALUES (?, ?)", @"Yuva", @"Hi there"]; 

-GUS(誰寫FMDB的傢伙)