【发布时间】:2015-11-05 05:12:26
【问题描述】:
这是我第一次尝试为 IOS 或任何 IOS 应用程序开发 SQLite 数据库。我正在尝试按照我在网上找到的教程进行调整以供我自己使用。数据库的创建没有任何问题,但我的 Insert 语句似乎永远不会返回我的错误消息。 控制台中没有出现任何内容,因为程序实际上没有出现任何严重问题。如果您需要更多信息,我会尽力找到并更新问题。
这是我的代码:
// Method to store a GPS location
-(void)insertGPS:(GPS*)GPS
{
// Create insert statement for the person
NSString *insertStatement = [NSString stringWithFormat:@"INSERT INTO GPSJob (jobNo, sourceMonitor, positionNumber, latitude, longitude) VALUES (\"%@\", \"%@\", \"%@\",\"%@\",\"%@\")", GPS.jobNumber, GPS.sourceMonitor, GPS.positionNumber, GPS.latitude, GPS.longitude ];
// Define an error
char *error;
// Attempt to execute the insert statement
if ( sqlite3_exec(databaseHandle, [insertStatement UTF8String], NULL, NULL, &error) == SQLITE_OK)
{
NSLog(@"GPS inserted into database with values: %@, %@, %@, %@, %@.", GPS.jobNumber, GPS.sourceMonitor, GPS.positionNumber, GPS.latitude, GPS.longitude);
}
// If the insert statement is not okay
else {
NSLog(@"Error: %s", sqlite3_errmsg(databaseHandle));
}
}
这是我正在关注的教程:http://www.apptite.be/tutorial_ios_sqlite.php
更新的错误信息是这样说的:
2015-08-12 15:28:25.299 NoiseApp[7602:207] Error: out of memory
-----------------------解决办法---------- ----------------------
对于任何想要解决这个问题的人,我只是将函数修改为如下:
// Method to store a GPS location
-(void)insertGPS:(GPS*)GPS
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"GPS.db"];
if(sqlite3_open([databasePath UTF8String], &databaseHandle) ==SQLITE_OK){
// Create insert statement for the person
NSString *insertStatement = [NSString stringWithFormat:@"INSERT INTO GPSJob (jobNo, sourceMonitor, positionNumber, latitude, longitude) VALUES (\"%@\", \"%@\", \"%@\",\"%@\",\"%@\")", GPS.jobNumber, GPS.sourceMonitor, GPS.positionNumber, GPS.latitude, GPS.longitude ];
// Define an error
char *error;
// Attempt to execute the insert statement
if ( sqlite3_exec(databaseHandle, [insertStatement UTF8String], NULL, NULL, &error) == SQLITE_OK)
{
NSLog(@"GPS inserted into database with values: %@, %@, %@, %@, %@.", GPS.jobNumber, GPS.sourceMonitor, GPS.positionNumber, GPS.latitude, GPS.longitude);
}
// If the insert statement is not okay
else {
NSLog(@"Error: %s", sqlite3_errmsg(databaseHandle));
}
}
}
【问题讨论】:
-
不要输出固定的(无用的)错误信息。让数据库告诉你出了什么问题。
NSLog(@"Error: %s", sqlite3_errmsg(databaseHandle)); -
是的,请在语句执行后至少发布
error的值;另外,实际返回的状态很重要,所以也要打印出来 -
你为什么要在'if'中执行该语句两次?执行一次并将结果存储在变量中;你的 else if 一般没有意义,因为如果它不是 0 那么它就不是......如果你在这里关注我。或者,您是否尝试执行该语句两次,以防它第二次起作用?
-
我没有意识到我告诉它执行该语句两次,老实说,这只是粗心的尝试使其工作的尝试。它只是为了在它不起作用时打印错误消息。
标签: ios cocoa-touch ios5 sqlite xcode4.2