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

Problems with SQLite3 Insert statement, xcode 4.2 developing for IOS 5

这是我第一次尝试为 IOS 或任何 IOS 应用程序开发 SQLite 数据库。我正在尝试遵循我在网上找到的教程并将其改编为我自己使用。数据库创建时没有任何问题,但我的 Insert 语句似乎从来没有 return 我的错误消息。 控制台中没有任何显示,因为该程序实际上没有出现任何严重错误。如果您需要更多信息,我会尽力找到它并用它更新问题。

这是我的代码:

// 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));
}
}
}

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

使用 sqlite3_open 打开你的数据库,如果你还没有这样做的话。 打开的例子。 (注意,如果你想写入这个数据库,你应该将它从 resourcePath 复制到某个可写的地方,然后打开这个版本)

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