我需要更新我的SQLite数据库表。
表由AppName(String),StartTime(String)和EndTime(String)列组成。
我需要更新记录的EndingTime,其中AppName = app(包含当前应用程序名称的变量)和EndingTime!=“0”。
Single Where子句工作正常,但我不知道包含两个where子句的标准过程。我尝试了以下方式,但没有结果。
return db.update(DATABASE_TABLE, args, "AppName=? AND EndingTime<>?", new String[]{AppName,"0"})>0
请帮助。
答案 0 :(得分:0)
您可以在onUpgrade()方法上使用 ALTER TABLE 功能。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}
答案 1 :(得分:0)
尝试使用!= 代替&lt;&gt; 。
答案 2 :(得分:0)
你正在做的事情是正确的,你应该使用!=而不是&lt;&gt;。当我在我的sql语句中需要两个WHERE子句时,我也通过AND加入它们。这样做没有坏处。它不会将您的查询暴露给SQL注入攻击,因为您正在使用参数化查询。
答案 3 :(得分:0)
AND EndingTime != "0"
我不确定你是否指的是方法中提供的EndingTime,比如说:
public static void updateEndingTime (final Context context,
String appName, int endingTime) {}
或者,如果您的意思是EndingTime已经存储在该应用名称的数据库中。
在第一种情况下,只需在更新数据库之前执行if语句,例如,如果提供的endingTime不同于零,则保存该值,否则不会:
public static void updateEndingTime (final Context context,
String appName, int endingTime) {
//open your database object, blah, blah
if (endingTime != 0) {
//save the data
}
}
如果是第二种情况,那么只需将两者合并为“和”字即可。
public static int updateEndingTime (final Context context,
String appName, int endingTime) {
//open your database object, blah, blah
String where = "AppName = " + appName + " and EndingTime != 0 ";
return mDatabase.update(DATABASE_TABLE, args, where, null);
}
确保args
是一个结构合理的ContentValues对象。