Android 安卓SQLite“;0“U id”;在select语句中

Android 安卓SQLite“;0“U id”;在select语句中,android,sqlite,Android,Sqlite,我用的是jgilfelt的 我试图查看他的示例项目,发现了以下代码: public Cursor getEmployees() { SQLiteDatabase db = getReadableDatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); String [] sqlSelect = {"0 _id", "FirstName", "LastName"}; String sql

我用的是jgilfelt的

我试图查看他的示例项目,发现了以下代码:

    public Cursor getEmployees() {

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String [] sqlSelect = {"0 _id", "FirstName", "LastName"}; 
    String sqlTables = "Employees";

    qb.setTables(sqlTables);
    Cursor c = qb.query(db, sqlSelect, null, null,
            null, null, null);

    c.moveToFirst();
    return c;

}

“0”在“ID”字段的select语句中的含义是什么?

它使用列名
\u ID
返回
0
的值(它使用列名别名)


您可以通过这种方式返回表中不存在的列。

一些Android适配器要求您始终选择一个_id字段,即使您的表中没有。试试看,你的应用程序将在不选择_id的情况下崩溃。因此,他们正在通过选择一个包含0的模拟_id值来解决这个问题


编辑:更好的方法是,例如,如果您想在表中使用“id”而不是“\u id”,只需执行
选择id作为\u id FROM…

这不是真的。我刚刚试过,至少在4.4上,它可以用任何名称返回单个列,例如
{“2 aaa”}
。这取决于您使用的适配器。这里有更多信息:所讨论的代码在顶部有一个链接,该代码使用SimpleCursorAdapter中的光标。是的,我注意到表中没有列_id。因此,如果我打印_id的值,它将一直返回0,对吗?至于_id,我将使用rowid _id,因此它将返回真实的行id(每个SQLite表中都有一个隐藏列),而不是0。