在我的应用程序中,我已将数据存储在 sqlite3 数据库中,并将所有 sqlite3 数据库上传到我的在线服务器,一旦复制到我的服务器,我想删除我存储在本地数据库中的所有记录。
我有两个视图控制器第一个视图控制器,我将数据存储到 sqlite3 第二个视图控制器我用来将数据加载到我的服务器我已经给出了如果用户连接到网络它有上传数据。
我想在将数据上传到我的服务器之后想要删除本地数据库中的所有记录。
我已经尝试了一些不起作用的方法,请告诉我如何解决这个问题。
- (void) Delete_LoginData
{
if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
{
const char *sql = "DELETE * FROM reg";
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
{
sqlite3_reset(statement);
}
}
}
我在Reachability
。
- (BOOL)reachable
{
Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"];
NetworkStatus internetStatus = [reach currentReachabilityStatus];
if(internetStatus == NotReachable)
{
}
else
{
[self Delete_LoginData];
}
return YES;
}
我的文件路径。
- (NSString *) filePath
{
NSArray *paths = filepath, YES);
return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"bp.sqlite"];
}
代码打开数据库。
- (void)openDB
{
if (sqlite3_open([[self filePath] UTF8String], &db)!=SQLITE_OK)
{
sqlite3_close(db);
NSAssert(0, @"Database failed to open");
}
else
{
NSLog(@"database opened");
}
}
我已经使用上面的方法从我的本地数据库中删除了记录,但是我正在做错了。
感谢。
答案 0 :(得分:2)
使用sqlite3_step
代替sqlite3_reset
来执行查询
if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
{
const char *sql = "DELETE FROM reg";
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
{
if(sqlite3_step(statement) == SQLITE_DONE){
// executed
}else{
//NSLog(@"%s",sqlite3_errmsg(db))
}
}
sqlite3_finalize(statement);
}
sqlite3_close(db);
答案 1 :(得分:0)
sqlite3_prepare_v2
没有执行任务你需要迈出一步
if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK){
NSString *sql = "DELETE FROM reg";
const char *query_st = [sql UTF8String];
if(sqlite3_prepare_v2(database, query_st, -1, &statement, NULL) == SQLITE_OK){
// Loop through the results and add them to the feeds array
if(sqlite3_step(statement) == SQLITE_DONE) {
// Deleted records,....
}else{
NSAssert1(0,@"Error when counting rows %s",sqlite3_errmsg(database));
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
答案 2 :(得分:0)
你可以这样做,
sqlite3_stmt *statement;
- (void) Delete_LoginData
{
// Open database first
if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
{
// Sql query
const char *sql = "DELETE FROM reg";
// We are preparing the statement here
if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
{
// If that prepared statement is OK then we can execute that statement
if(sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@" Records deleted successfully..");
}
else
{
NSLog(@" Opppsss..... Unable to delete records..");
}
}
// Finalizing the statement
sqlite3_finalize(statement);
// Closing the database
sqlite3_close(db);
}
希望这对你有用......
谢谢...