【问题标题】:Android SqLite Exception: unrecognized token in deleting from databaseAndroid SqLite 异常:从数据库中删除时无法识别令牌
【发布时间】:2014-05-28 10:39:27
【问题描述】:

我正在尝试从名为 Globals 的数据库中删除所有内容,其中包含 sessionID 列表。每次用户登录时都会生成一个 SessionID,因此数据库中不需要以前的 sessionID,必须将其删除,因为它们将永远不会再次使用。我实现了一种删除数据库中所有 sessionID 的方法,但指定的除外,但是当我运行代码时出现此错误:

“android.database.sqlite.SQLiteException: unrecognized token: "8a8878dc" (code 1): , while compile”

我该如何解决这个问题?

这是我删除 sessionID 的删除方法

public void deleteAll(String sessionID) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_SESSIONSTATE, KEY_SESSIONID + " != " + sessionID , null);
}

它在以下代码中运行: 结果对象返回一个字符串,它给出了我要使用的 sessionID

SoapObject result = (SoapObject)envelope.bodyIn;
                if(result != null)
                {
                    globals = new Globals(getBaseContext());

                    String resultStr = result.getPropertyAsString(0);
                    resultStr = resultStr.replace("\n", "");
                    String [] resultArr = resultStr.split("\\^");
                    sessionID = resultArr[0];
                    globals.deleteAll(sessionID);
                }

【问题讨论】:

  • 8a8878dc-7f5d-43c8-a88b-60a23831b9f3 是一个字符串。像字符串一样使用它'8a8878dc-7f5d-43c8-a88b-60a23831b9f3'

标签: java android sqlite


【解决方案1】:

在 SQL 中,字符串必须写在“引号中”。

但是,为了避免这样的格式问题,您应该使用参数:

db.delete(TABLE_SESSIONSTATE,
          KEY_SESSIONID + " != ?",
          new String[] { sessionID });

【讨论】:

  • 这似乎是从数据库中删除所有内容。我希望能够只保留从结果代码中生成的一个 sessionID
  • 会话ID真的是这样的36个字符的字符串吗?
  • 是的,它来自自动生成该 sessionID 的 WebService。当用户登录时,它会生成一个新的 sessionID
【解决方案2】:

试试这个:

  • 创建从数据库中删除不需要的 sessionID 的 Helper 方法。
  • 创建另一个插入新 SessionID 的 Helper 方法
  • 首先调用删除先前 sessionID 的方法,然后是插入新的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多