У меня есть часть кода, который раньше работал, и другие итерации, которые работают в одном приложении, и сравнивали код, и они идентичны по своей структуре. Это заставляет меня ИНСАНЕ !!!!!!sqlite3_prepare_v2 вызывает SQLITE_ERROR в коде iPhone
В этом случае 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);
Каково значение error_code после вызова? –
Просто пытаясь выяснить, какая ошибка это бросает ... он улавливает код ошибки, возвращаемый sqlite3_prepare_v2, поэтому я могу оценить это в отладчике при прохождении через него. – incognitii
@DonDickinson, в моем случае его возвращаемое значение 1. то есть '#define SQLITE_ERROR 1/* Ошибка SQL или отсутствующая база данных * /' База данных присутствует в виде пакета и 'sqlite3_open ([путь UTF8String] и база данных) == SQLITE_OK', а также оператор 'const char * sql = "SELECT * FROM Images";' работал. Но это «const char * sql =» SELECT Image FROM Images WHERE CatagoryId = 2 »; не работает, его выполнение выполняется в sqlManager, но не в ios. – HDdeveloper