【问题标题】:Read data from SQLite where column name contains spaces从列名包含空格的 SQLite 读取数据
【发布时间】:2012-12-24 09:05:53
【问题描述】:

我有一个名为“条件名称”的名称(.sql 文件已从服务器生成)

但在 android 中,我在从该表中读取数据时遇到了以下异常。

12-24 14:34:00.870: W/System.err(269): android.database.sqlite.SQLiteException:没有这样的列:条件:,

编译时:

SELECT 条件、类别、子类别、条件名称、本地路径、 远程路径、标题、content_type FROM library WHERE category = ?

它无法识别整个表名并在空格处中断。 如果您有任何想法,请帮助我。

【问题讨论】:

  • 出于某种原因,我总是认为这种性质的事物名称中的空格是一个不合理的想法。
  • 尝试将表名用反引号括起来,就像在普通 SQL 中一样
  • @JanDvorak 你的意思是像[条件名称]?
  • @VijayYD 这些是方括号。反引号是让 StackOverflow 认为您想要格式化为内联代码块的东西。
  • sqlite.org/lang_keywords.html 照描述做,一切都会好起来的。

标签: java android sqlite


【解决方案1】:

对于引用表/列名等标识符,SQLite 支持反引号以与 MySQL 兼容,并支持方括号以与 SQL Server 兼容,但可移植的方式是使用双引号:

SELECT "condition name" FROM library

(单引号将用于字符串值。)

【讨论】:

    【解决方案2】:

    你把表名放在引号之外:

    tableName."列名"

    而不是

    “表名.列名”

    【讨论】:

      【解决方案3】:

      使用单引号

      SELECT 'condition name' FROM library
      

      或双引号

      SELECT "condition name" FROM library
      

      在某些情况下,表的名称可以包含空格甚至单引号,例如:

      SELECT condition's name FROM library
      

      在这种情况下,将表名中的' 替换为''

      SELECT 'condition''s' name FROM library
      

      【讨论】:

        【解决方案4】:
        String someName = "The pig";
        String sql = 
        "SELECT * FROM " + TABLE + " WHERE " + COL_TITLE + "=" + '"' + someName + '"';
        

        【讨论】:

        • 我认为你需要解释你在这里做什么来解决问题。目前尚不清楚是哪一部分修复了它。
        • 你能详细说明你的答案吗?
        • 对不起,这是个错误!
        猜你喜欢
        • 1970-01-01
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多