这是我第一次尝试为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));
}
}
}
答案 0 :(得分:1)
在您的函数中未定义databaseHandle。你应该在某处获得对sqlite3_open的引用。
如果您尚未执行此操作,请使用sqlite3_open打开您的数据库。 打开的例子。 (注意,如果你想写入这个数据库,你应该将它从resourcePath复制到可写的地方,并打开这个版本)
databaseName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"DB.sql"];
if(sqlite3_open([databaseName UTF8String],&databaseHandle) == SQLITE_OK)
{
}