I have built an application in which I use sqlite to store data. It is running well in the simulator but when it run on a real device it stop responding to sqlite. Even the code is not responding to sqlite command..Here is my code..
- (void)viewDidLoad {
//Create Database
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir=[paths objectAtIndex:0];
NSString *dirString=[dir stringByAppendingPathComponent:@"ABC.sqlite"];
databasepath=[[NSString alloc]initWithString:dirString];
NSFileManager *fileManager=[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:databasepath]==NO)
{
const char *dbpath=[databasepath UTF8String];
if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
{
char *errMsg;
const char *createSQL="CREATE TABLE IF NOT EXISTS QUESTIONS(ID INTEGER PRIMARY KEY AUTOINCREMENT,QUESTIONSLIST TEXT,ANSWER1 TEXT,ANSWER2 TEXT,ANSWER3 TEXT,ANSWER4 TEXT,CORRECTANSWER TEXT)";
if (sqlite3_exec(contactDB, createSQL, NULL, NULL, &errMsg) !=SQLITE_OK)
{
NSLog(@"Failed to create table");
}
sqlite3_close(contactDB);
}
}
[super viewDidLoad];
}
-(void)xyz{
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir=[paths objectAtIndex:0];
NSString *dirString=[dir stringByAppendingPathComponent:@"ABC.sqlite"];
databasepath=[[NSString alloc]initWithString:dirString];
const char *dbpath=[databasepath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
{
NSString *querySQL=[NSString stringWithFormat:@"select * from questions order by random() LIMIT 1"];
const char *query=[querySQL UTF8String];
if (sqlite3_prepare_v2(contactDB, query, -1, &statement, NULL)==SQLITE_OK)
{
if (sqlite3_step(statement)==SQLITE_ROW)
{
NSString *questionField=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)];
questionView.text=questionField;
NSString *option1=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 2)];
[answer1 setTitle:option1 forState:UIControlStateNormal];
NSString *option2=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 3)];
[answer2 setTitle:option2 forState:UIControlStateNormal];
NSString *option3=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 4)];
[answer3 setTitle:option3 forState:UIControlStateNormal];
NSString *option4=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 5)];
[answer4 setTitle:option4 forState:UIControlStateNormal];
NSString *option5=[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 6)];
correctAnswer.text=option5;
correctAnswer.hidden=NO;
[option1 release];
[option2 release];
[option3 release];
[option4 release];
[option5 release];
}
sqlite3_finalize(statement);
}
sqlite3_close(contactDB);
}
}
NoviceDeveloper:
If you want to do this, you need to have this file in the resources of your project: in this way it will be included to the app package and transfered to your device then.
Next step is to copy it to applicationDocumentsDirectory if you didn’t do so before. Smth. like:
EDITED:
With function: