SQLite Query带有两个where子句

时间:2013-06-05 11:38:35

标签: android

我需要更新我的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

请帮助。

4 个答案:

答案 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对象。