Ios 从sqlite表中删除原始数据时出现的问题
这就是我在头球中所做的Ios 从sqlite表中删除原始数据时出现的问题,ios,sqlite,tableview,Ios,Sqlite,Tableview,这就是我在头球中所做的 static sqlite3 *database = nil; static sqlite3_stmt *deleteStmt = nil; @implementation SQLAppDelegate @synthesize window; @synthesize navigationController; @synthesize coffeeArray; 这就是我用来删除原始数据的方法 - (void) removeCoffee:(NSNumber *)
static sqlite3 *database = nil;
static sqlite3_stmt *deleteStmt = nil;
@implementation SQLAppDelegate
@synthesize window;
@synthesize navigationController;
@synthesize coffeeArray;
这就是我用来删除原始数据的方法
- (void) removeCoffee:(NSNumber *)coffeeObj {
NSLog(@"coffeeObj%@",coffeeObj);
int myInteger = [coffeeObj integerValue];
NSLog(@"myInteger%d",myInteger);
// print this myInteger0
NSLog(@"%@",coffeeArray);
//print object
if (sqlite3_open([self getDBPath], &database) == SQLITE_OK)
{
NSLog(@"myInteger%@",[self getDBPath]);
NSString *sql = [NSString stringWithFormat: @"delete from Coffee where CoffeeID =%d",myInteger];
const char *del_stmt = [sql UTF8String];
NSLog(@"%@",del_stmt); // getting print
// print this delete from Coffee where CoffeeID =0.
sqlite3_prepare_v2(database, del_stmt, -1, & deleteStmt, NULL);
NSLog(@"sqlite3_step(deleteStmt) == SQLITE_DONE%@",sqlite3_step(deleteStmt) == SQLITE_DONE);
// this print null
if (sqlite3_step(deleteStmt) == SQLITE_DONE)
{
//NSLog(@"hi") this is not getting print
} else {
//NSLog(@"hi") this is getting print
}
sqlite3_finalize(deleteStmt);
sqlite3_close(database);
[coffeeArray removeObjectAtIndex:myInteger];
NSLog(@"%@",coffeeArray);
// object is deleted
}
}
我的桌子如下
table name = Coffee
CoffeeID(INTEGER)=0
CoffeeName(VARCHAR)=Latte
Price(REAL)=2.99
若对象从数组中删除,那个么它就不会出现在表格单元格中。但它没有从数据库表中删除,这就是为什么当我再次启动应用程序时,它会再次显示。请帮助我做错事。开始删除对象之前,请确认数据库是否正确打开。就这样试试吧
//Setting path
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"database.db"]];
const char *dbpath=[databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *sql = [NSString stringWithFormat: @"delete from Coffee where CoffeeID =%d",myInteger];
const char *del_stmt = [sql UTF8String];
sqlite3_prepare_v2(database, del_stmt, -1, & deleteStmt, NULL);
if (sqlite3_step(deleteStmt) == SQLITE_DONE)
{
} else {
}
sqlite3_finalize(deleteStmt);
sqlite3_close(database);
[coffeeArray removeObjectAtIndex:myInteger];
NSLog(@"%@",coffeeArray);
// object is deleted
}
将nslog置于if和else条件下,比较SQLITE_DONE并检查它所说的话!如果条件从它跳转到sqlite3_finalize(deleteStmt),则它不会进入;sqlite3_关闭(数据库);检查@Ganapathy的答案它应该只是连接问题。Ganapathy我根据你说的编辑了我的问题,请再次检查它,如果(sqlite3_open(dbpath,&database)==SQLITE_OK)语句如你所说是正确的。你检查过了吗?dbpath应该是唯一的path或path/SQL.sqlite?是的,当我打印了东西时,它会以这种方式打印检查你更新的答案是否正确?我犯了一些错误。
if(sqlite3_open([[self filepath] UTF8String], &db) == SQLITE_OK)
{
Deletestatement = nil;
if(Deletestatement == nil)
{
const char *sql = "delete from Sqlitemanager2;";
if(sqlite3_prepare_v2(db, sql, -1, &Deletestatement, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(db));
}
if (SQLITE_DONE != sqlite3_step(Deletestatement)) //prathibha for problem in if
NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(db));
sqlite3_finalize(Deletestatement);
}
I hope this will help you.