SQLite3 Insert语句的问题,xcode 4.2为IOS 5开发

时间:2015-08-12 14:16:22

标签: ios cocoa-touch ios5 sqlite xcode4.2

这是我第一次尝试为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));
}
}
}

1 个答案:

答案 0 :(得分:1)

在您的函数中未定义databaseHandle。你应该在某处获得对sqlite3_open的引用。

如果您尚未执行此操作,请使用sqlite3_open打开您的数据库。 打开的例子。 (注意,如果你想写入这个数据库,你应该将它从resourcePath复制到可写的地方,并打开这个版本)

databaseName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"DB.sql"];
if(sqlite3_open([databaseName UTF8String],&databaseHandle) == SQLITE_OK)
{
}