Hello,
I'm trying a simple SQLite tutorial and I have a small problem.
My code is the following:
Code:
-(id) init
{
// Setup some globals
databaseName = @"animals.sql";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
return self;
}
-(void) checkAndCreateDatabase{
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL success;
// Create a FileManager object, we will use this to check the status
// of the database and to copy it over if required
NSFileManager *fileManager = [NSFileManager defaultManager];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:databasePath];
// If the database already exists then return without doing anything
// TODO uncheck this if(success) return;
// If not then proceed to copy the database from the application to the users filesystem
// Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
// Copy the database from the package to the users filesystem
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
//[fileManager release];
}
-(NSMutableArray*) getBrands {
// Setup the database object
sqlite3 *database;
// Init the animals Array
NSMutableArray *brands = [[NSMutableArray alloc] init];
// Open the database from the users filessytem
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
// Setup the SQL Statement and compile it for faster access
const char *sqlStatement = "select * from animals";
sqlite3_stmt *compiledStatement;
NSLog(@"sql run = %i",sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL));
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
{
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
// Read the data from the result row
NSString *brandName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
[brands addObject:brandName];
//[brandName release];
}
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
return brands;
}
The problem is that my database gets copied right, but somehow on the red line above I get return int 26 which means
SQLITE_NOTADB -> that my file is not a DB.
My file animals.sql is the following:
Code:
CREATE TABLE animals ( id INTEGER PRIMARY KEY, name VARCHAR(50), description TEXT, image VARCHAR(255) );
INSERT INTO animals (name, description, image) VALUES ('Elephant', 'desc1', 'img1.jpg');
INSERT INTO animals (name, description, image) VALUES ('Monkey', 'desc2', 'img2.jpg');
Any ideas on why I get that error message? I have everything right, the file structure, it copies right where it should be, but somehow it doesn't recognizes it as a DB. I have added also sqlite3.h and libsqlite3.0.dylib. I really don't know what's wrong.
Thank you in advance for taking time to read my post.