Skip to content Skip to sidebar Skip to footer

Sqlite3_open: "unable To Open Database File"

I get 'unable to open database file' when executing rc = sqlite3_open('test.db', &db); ?? sqlite3 *db; // sqlite3 db struct char *zErrMsg = 0; int rc; // Open the test.db fil

Solution 1:

sqlite3_open returns an error if the database does not already exist. To create the database if it doesn't already exist, use sqlite3_open_v2 with the SQLITE_OPEN_CREATE and SQLITE_OPEN_READWRITE flags (both are required):

rc = sqlite3_open_v2(/* DB Path */, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

Reference


To find /* DB PATH */, you need to base the filename off of the documents directory:

- (NSString *) applicationDocumentsDirectory 
{    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

You can use this convenience method to combine the documents path with the database name:

NSString *documents = [self applicationDocumentsDirectory];
NSString *dbPath = [documents stringByAppendingPathComponent:@"test.db"];

rc = sqlite3_open_v2([dbPath UTF8String], &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

Solution 2:

#define SQLITE_OK 0
sqlite3 *db;
char *zErrMsg=0;
if(sqlite3_open("demo.db", &db) == SQLITE_OK)
{
    if(sqlite3_exec(db, "select * from Users", callback, 0, &zErrMsg) == SQLITE_OK)
            msgbox1("success");
    sqlite3_close(db);
}
elsemsgbox1("failure");

here is the sample code which i use;

Post a Comment for "Sqlite3_open: "unable To Open Database File""