【问题标题】:android.database.sqlite.SQLiteException: unrecognized tokenandroid.database.sqlite.SQLiteException:无法识别的令牌
【发布时间】:2016-11-25 00:25:43
【问题描述】:

使用主键“TransactionID”从表中删除条目时出现异常。 TransactionID 值是一个字母数字序列,其中也包含“-”。以下是 LogCat 消息


android.database.sqlite.SQLiteException: unrecognized token : "29e7c8a8" (code 1):, while compiling: DELETE FROM Datas WHERE TransactionID=29e7c8a8-b38b-4812-8a2d

TranscationID 无效吗?

【问题讨论】:

  • 为 TransactionID 值添加引号

标签: android sqlite


【解决方案1】:

用单引号连接起来

DELETE FROM Datas WHERE TransactionID='29e7c8a8-b38b-4812-8a2d'

【讨论】:

    【解决方案2】:

    试试这个代码

     db.delete(Datas,TransactionID + " = ?",new String[] { "29e7c8a8-b38b-4812-8a2d" });
    

    【讨论】:

      【解决方案3】:

      如果您尝试使用文本查询检索或插入 NULL control character(如 "\u0000")到 SQLite 数据库中,也会出现此异常:

      SELECT * FROM my_table WHERE text =
         "Here is a NULL control character \u0000 in the text";
      

      虽然没有简单的键盘输入控制字符的方法,但它在Java String中仍然是有效字符,并且在将String发送到Android SQLite数据库时会导致异常:

      android.database.sqlite.SQLiteException: unrecognized token (code 1):
        "'Here is a NULL control character ": 
        , while compling: SELECT * FROM my_table WHERE text = '...';
        at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
      

      因为它是一个不可见的字符并且不容易被发现,所以您可以使用字符串的十六进制显示来查看所有字符。例如,使用 BBEdit 的 'Hex dump front document' 作为 UTF-16LE (Little-Endian)。

      为避免此崩溃,您必须使用 String.replace() 删除此 NULL 字符。在此处查看示例:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多