【问题标题】:Return all columns of a SQLite table in Android在 Android 中返回 SQLite 表的所有列
【发布时间】:2011-05-31 20:32:57
【问题描述】:

我正在使用的 SQLite 数据库表会在需要时添加列。我不想冒着更新数据库和忘记更新硬编码值的风险对列进行硬编码。如何返回表中所有列的名称? (最好是String[]

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    最好使用SQLiteDatabase 实例并使用查询方法

    SQLiteDatabase mDataBase;
    (some code here...)
    mDataBase = getReadableDatabase();
    Cursor dbCursor = mDataBase.query(TABLE_NAME, null, null, null, null, null, null);
    String[] columnNames = dbCursor.getColumnNames();
    

    columnNames 应该有列名

    【讨论】:

    • 请告诉我如何从特定列中获取价值?
    • 游标 dbCursor = mDataBase.query(TABLE_NAME, new String[]{YOUR_COLUMN_NAME_1,YOUR_COLUMN_NAME_2,....}, null, null, null, null, null);
    • 什么是getReadableDatabase?
    【解决方案2】:

    您可能不需要列名列表。

    您似乎需要列名列表,以便您可以建立一个以逗号分隔的列列表以供选择。如果是这种情况,那么您通常会在 SELECT 查询中放置列名列表的位置,您可以改用星号:

    SELECT * FROM table WHERE ...
    

    或者如果表有别名:

    SELECT t.* FROM table AS t ...
    

    星号表示“所有列”。

    编辑:如果您确实想要一个表的列名列表,那么您可以使用以下代码:

    Cursor c = db.rawQuery("SELECT * FROM table WHERE 0", null);
    try {
        String[] columnNames = c.columnNames();
    } finally {
        c.close();
    }
    

    请注意,您不得以任何方式修改返回的字符串数组:https://code.google.com/p/android/issues/detail?id=3731

    【讨论】:

    • 为什么使用WHERE 0?我们不能没有吗? :O
    • @Phantômaxx 这是为了避免获取任何行(以便只检索列 - 没有任何行)。
    【解决方案3】:

    有趣的是,查询方法接受 null 作为列参数的输入。如果输入null,则返回所有列。

    db.query("Table_name",null,COLUMN_ID + "=" + id,null,null,null,null);
    

    将返回具有指定 id 的行的所有列。

    您可以在此处查看方法定义。

    【讨论】:

    • 来自if(columns != null && columns.length != 0) { appendColumns(query, columns); } else { query.append("* "); }
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2010-12-22
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多