我想删除sqlite数据库中的一行。请参考sql datastructure和我目前的删除方法,该方法无效。
private static final String[] TABLE_MESSAGE_FIELDS = {
FIELD_USERNAME, "CHAR(32) NOT NULL",
FIELD_READED, "INTEGER(1) NOT NULL",
FIELD_SEND, "INTEGER(1) NOT NULL",
FIELD_TIMESTAMP, "INTEGER(64) NOT NULL",
FIELD_CONTENT, "TEXT NOT NULL",
};
//more tables
private static final String[] TABLE_MESSAGE_INDEXS = {
FIELD_USERNAME, FIELD_READED,
};
这是结构,基本上它是一个即时通讯(IM)的android应用程序,因此用户可以发送和接收消息。虽然接收消息等操作正在起作用,但删除选项不是。
我希望删除用户之间的整个会话,换句话说,不是会话中的个别消息,而是整个会话本身。我想正确的方法是找出用户名,并删除整行。表TABLE_MESSAGE_FIELDS包含指示消息的5列,我想删除整个会话。
这就是我的方式
public boolean deleteMessage(String userName)
{
SQLiteDatabase database = mLocalDatabase.getWritableDatabase();
final String[] COLUMNS = { FIELD_TIMESTAMP, FIELD_CONTENT };
final String SELECTION = FIELD_USERNAME + "=?" ;
//database.beginTransaction();//do i need this?
boolean result= database.delete(TABLE_MESSAGE,SELECTION,new String[]{userName})>=0;
//database.endTransaction();//??
database.close();
return result;
}
答案 0 :(得分:1)
假设您已正确声明创建查询并且一切正常,您的代码看起来是正确的,因此您的行未被从数据库中删除的原因可能是您提供了错误的用户名,即数据库中的每一行都不等于给定的的userName 即可。尝试在执行删除操作之前打印变量。
然后,你提到了交易。如果您使用它,则需要致电
setTransactionSuccessful()
或者您的更改将被回滚,数据库将在事务之前返回状态。
boolean result = false;
db.beginTransaction();
result = db.delete(TABLE_MESSAGE, SELECTION, new String[] {userName}) > 0;
db.setTransactionSuccessful();
db.endTransaction();
答案 1 :(得分:-1)
public boolean deleteMessage(String userName) {
boolean result = false;
if (userName != null && !userName.equals("")) {
userName = userName.trim();
SQLiteDatabase database = mLocalDatabase.getWritableDatabase();
// final String[] COLUMNS = { FIELD_TIMESTAMP, FIELD_CONTENT };
// final String SELECTION = FIELD_USERNAME + "=?" ;
// database.beginTransaction();//do i need this?
String whereCondition = FIELD_USERNAME + "=" + userName;
result = database.delete(TABLE_MESSAGE, whereCondition, null);
// database.endTransaction();//??
database.close();
}
return result;
}