I write a application have use sqlite save data. I add data to table success. But i can't delete content in table. It notify DATABASE IS LOCKED.
My code:
Code Delete in sqlite
//Xoá tài khoản
-(BOOL) delete_Account
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
const char *delete_Statement = "DELETE FROM info";
if(sqlite3_prepare_v2(database, delete_Statement,-1, &statement, NULL)==SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"DELETE Account : %@", @"Ban da xoa thanh cong!");
return YES;
}
else{
NSLog(@"DELETE Account: %@ %s",@"Xoa that bai",sqlite3_errmsg(database));
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
Full code
#import "DBManager.h"
static DBManager *sharedInstance = nil;
static sqlite3 *database = nil;
static sqlite3_stmt *statement = nil;
@implementation DBManager
+(DBManager*)getSharedInstance{
if (!sharedInstance) {
sharedInstance = [[super allocWithZone:NULL]init];
[sharedInstance createDB];
}
return sharedInstance;
}
-(BOOL)createDB{
NSString *docsDir;
NSArray *dirPaths;
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
// Build the path to the database file
databasePath = [[NSString alloc] initWithString:
[docsDir stringByAppendingPathComponent: @"Sync.db"]];
BOOL isSuccess = YES;
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: databasePath ] == NO)
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
char *errMsg;
const char *sql_statement = "CREATE TABLE IF NOT EXISTS info (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PASS TEXT, TOKEN TEXT, COMPANY TEXT, CUSTOMER TEXT)";
const char*sql_create_contact_db = "CREATE TABLE IF NOT EXISTS contact (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST TEXT, LAST TEXT, PHONE TEXT, EMAIL TEXT)";
if (sqlite3_exec(database, sql_statement, NULL, NULL, &errMsg)
!= SQLITE_OK)
{
isSuccess = NO;
NSLog(@"Failed to create table INFO");
}
if (sqlite3_exec(database, sql_create_contact_db, NULL, NULL, &errMsg)
!= SQLITE_OK)
{
isSuccess = NO;
NSLog(@"Failed to create table CONTACT");
}
sqlite3_finalize(statement);
sqlite3_close(database);
return isSuccess;
}
else {
isSuccess = NO;
NSLog(@"Failed to open/create database");
}
}
return isSuccess;
}
-(BOOL) add_Data_Info:(NSString *)username :(NSString *)password :(NSString *)token
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO info (name, pass, token, company, customer) VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")", username, password, token, @"ON", @"OFF"];
const char *insert_Statement = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_Statement,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
//Thêm data vào database
-(BOOL) add_Data_Sync:(NSString *)first :(NSString *)last :(NSString *)phone : (NSString*)email
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO contact (first,last,phone,email) VALUES (\"%@\",\"%@\",\"%@\",\"%@\")", first, last, phone, email];
const char *insert_Statement = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_Statement,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
//Cập nhật token
-(BOOL) update_Data_Info:(NSString *)username : (NSString *) token
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *updateSQL = [NSString stringWithFormat:@"UPDATE info Set token = \"%@\"where name = \"\"%@\")", token, username];
const char *update_Statement = [updateSQL UTF8String];
sqlite3_prepare_v2(database, update_Statement,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
//Cập nhật token
-(BOOL) update_Sw_Info:(NSString *)username : (NSString *) status
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *updateSQL = [NSString stringWithFormat:@"UPDATE info Set company = \"%@\" where name = \"%@\" ", status, username];
const char *update_Statement = [updateSQL UTF8String];
sqlite3_prepare_v2(database, update_Statement,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
//Xoá tài khoản
-(BOOL) delete_Account
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
const char *delete_Statement = "DELETE FROM info";
if(sqlite3_prepare_v2(database, delete_Statement,-1, &statement, NULL)==SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"DELETE Account : %@", @"Ban da xoa thanh cong!");
return YES;
}
else{
NSLog(@"DELETE Account: %@ %s",@"Xoa that bai",sqlite3_errmsg(database));
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
-(BOOL)delete_All_Contact
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM contact"];
const char *delete_Statement = [deleteSQL UTF8String];
sqlite3_prepare_v2(database, delete_Statement,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_ROW)
{
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}
- (NSArray*) getInfo
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:
@"SELECT name, token, pass, company, customer FROM info"];
const char *query_stmt = [querySQL UTF8String];
NSMutableArray *resultArray = [[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(database,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *name = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 0)];
[resultArray addObject:name];
NSString *token = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 1)];
[resultArray addObject:token];
NSString *pass = [[NSString alloc]initWithUTF8String:
(const char *) sqlite3_column_text(statement, 2)];
[resultArray addObject:pass];
NSString *company = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 3)];
[resultArray addObject:company];
NSString *customer = [[NSString alloc]initWithUTF8String:
(const char *) sqlite3_column_text(statement, 4)];
[resultArray addObject:customer];
return resultArray;
}
else{
NSLog(@"Not found");
return nil;
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return nil;
}
//Kiểm tra dữ liệu trong database
-(int)checkContact : (NSString *) txtPhone
{
int check = 0;
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:
@"SELECT COUNT(*) FROM contact WHERE phone = \"%@\"",txtPhone];
const char *query_stmt = [querySQL UTF8String];
NSMutableArray *resultArray = [[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(database,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
check = 1;
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return check;
}
@end
Aucun commentaire:
Enregistrer un commentaire