I have a fully populated database in SQLite that I\'d like to use in my new app. It\'s rather large, so I\'d like to avoid changing it to another format if possible. How can
This following methods will help you to handle database
Method for copy database in document directory if not exist
-(void)copyDatabase
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *insPath = [NSString stringWithFormat:@"Instamontage.sqlite"];
destPath = [documentsDirectory stringByAppendingPathComponent:insPath];
NSString *srcPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:insPath];
// NSLog(@"\n src %@ \n dest %@", srcPath, destPath);
if (![[NSFileManager defaultManager] fileExistsAtPath:destPath])
{
NSError *error;
NSLog(@"not exist");
[[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:destPath error:&error];
}
else
{
NSLog(@"exist");
}
}
Method for insert/deleting/updating table
-(BOOL)dataManipulation: (NSString *)query
{
BOOL result=NO;
if (sqlite3_open([destPath UTF8String], &connectDatabase)==SQLITE_OK)
{
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(connectDatabase, [query UTF8String], -1, &stmt, NULL)==SQLITE_OK)
{
sqlite3_step(stmt);
result=YES;
}
sqlite3_finalize(stmt);
}
sqlite3_close(connectDatabase);
return result;
}
Method for getting rows from table
-(NSMutableArray *)getData: (NSString *)query
{
NSMutableArray *arrData=[[NSMutableArray alloc]init];
if (sqlite3_open([destPath UTF8String],&connectDatabase)==SQLITE_OK)
{
sqlite3_stmt *stmt;
const char *query_stmt = [query UTF8String];
if (sqlite3_prepare_v2(connectDatabase,query_stmt, -1, &stmt, NULL)==SQLITE_OK)
{
while (sqlite3_step(stmt)==SQLITE_ROW)
{
NSMutableDictionary *dictResult=[[NSMutableDictionary alloc] init];
for (int i=0;i
Above methods in swift will written as below
Method for copy database in document directory if not exist
func copyDatabaseToDocumentDirectory() {
let directoryList = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
var documentDirectory = directoryList.first
documentDirectory?.append("/DatabasePract1.sqlite")
print(documentDirectory!)
if !FileManager.default.fileExists(atPath: documentDirectory!) {
let databaseBundlePath = Bundle.main.path(forResource: "DatabasePract1", ofType: "sqlite")
do {
try FileManager.default.copyItem(atPath: databaseBundlePath!, toPath: documentDirectory!)
self.databasePath = documentDirectory
} catch {
print("Unable to copy database.")
}
} else {
print("database exist")
self.databasePath = documentDirectory
}
}
Method for insert/deleting/updating table
func dataManipulation(query: String) -> Bool {
var database: OpaquePointer?
var result = false
if (sqlite3_open(databasePath, &database) == SQLITE_OK) {
var queryStatement: OpaquePointer?
if (sqlite3_prepare_v2(database, query, -1, &queryStatement, nil) == SQLITE_OK) {
sqlite3_step(queryStatement)
result = true
} else {
let errmsg = String(cString: sqlite3_errmsg(database)!)
print("error preparing insert: \(errmsg)")
}
sqlite3_finalize(queryStatement)
}
sqlite3_close(database)
return result
}
Method for getting rows from table
func fetchData(_ query: String) -> [[String:Any]] {
var database: OpaquePointer?
var arrData: [[String:Any]] = []
if (sqlite3_open(databasePath, &database) == SQLITE_OK) {
var stmt:OpaquePointer?
if sqlite3_prepare(database, query, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(database)!)
print("error preparing insert: \(errmsg)")
return arrData
}
while(sqlite3_step(stmt) == SQLITE_ROW) {
var dictData: [String: Any] = [:]
for i in 0..