У меня есть фрагмент кода, который работал, и другие его итерации, которые ДОЛЖНЫ работать в одном приложении, и сравнили код, и они идентичны по структуре Это сводит меня с ума !!!!!!
В этом случае sqlite3_prepare_v2 вызывает одно из этих бесполезных исключений SQLITE_ERROR. Очевидно, он может НАЙТИ базу данных и ОТКРЫТЬ базу данных, но не может подготовить для нее оператор.
У кого-нибудь есть идеи? Я в отчаянии здесь.
second_maindatabaseName = @"database.db";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
second_maindatabasePath = [documentsDir stringByAppendingPathComponent:second_maindatabaseName];
// Setup the database object
sqlite3 *database;
// Init the entry requirements Array
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:second_maindatabasePath];
if(!success) {
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:second_maindatabaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:second_maindatabasePath error:nil];
[fileManager release];
}
if(sqlite3_open([second_maindatabasePath UTF8String], &database) == SQLITE_OK) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
value1 = [defaults stringForKey:kConst1];
value2 = [defaults stringForKey:kConst2];
value3 = [defaults stringForKey:kConst3];
value4 = [defaults stringForKey:kConst4];
const char *sqlStatement = "SELECT * FROM myTable WHERE Field1 = ? AND Field2 = ? AND Field3 = ? AND Field4 = ?";
sqlite3_stmt *compiledStatement;
int error_code = sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL);
if(error_code == SQLITE_OK) {
// Loop through the results and add them to the feeds array
sqlite3_bind_text(compiledStatement,1,[value1 UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement,2,[value2 UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement,3,[value3 UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement,4,[value4 UTF8String],-1,SQLITE_TRANSIENT);
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *aNewValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);