0

我需要更新我的 SQLite 数据库表。

表由 AppName (String) 、StartTime (String) 和 EndTime (String) 列组成。

我需要更新 AppName = app(包含当前应用程序名称的变量)和 EndingTime !=“0”的记录的 EndingTime。

单个 Where 子句运行良好,但我不知道包含两个 where 子句的标准程序。我尝试了以下方式,但没有结果。

return db.update(DATABASE_TABLE, args, "AppName=? AND EndingTime<>?", new String[]{AppName,"0"})>0

请帮忙。

4

4 回答 4

0

除了您应该使用 != 而不是 <> 之外,您正在做的事情是正确的。当我在我的 sql 语句中需要两个 WHERE 子句时,我也通过 AND 将它们连接起来。这样做没有坏处。由于您使用的是参数化查询,因此无论如何它都不会将您的查询暴露给 SQL 注入攻击。

于 2013-06-05T11:54:41.230 回答
0

尝试使用!=而不是<>

于 2013-06-05T11:51:03.967 回答
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");
   }
}
于 2013-06-05T11:42:07.720 回答
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 对象。

于 2013-06-05T12:00:00.643 回答