java - Android中使用SQLite获取RowID

标签 java android sqlite

我正在创建一个应用程序来记录不同类(class)的作业。每个类(class)都有自己唯一的 ID,因此为每个类(class)列出的作业不会与其他类(class)重叠。这是我为某个类查找 rowid 的方法。

public int getIdFromClassName(String className){
    String query = "SELECT rowid FROM " + CLASSES_TABLE_NAME + " WHERE " + CLASSES_COLUMN_NAME + " = '" + className + "'";
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery(query, null);
    return res.getColumnIndex("id");
}

但是,这总是返回值 -1。

关于更改什么以返回正确的 rowid 值有什么想法吗?

编辑:

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(
            "create table " + CLASSES_TABLE_NAME + " " +
                    "(id integer primary key, " + CLASSES_COLUMN_NAME + " text)"
    );
    db.execSQL(
            "create table " + ASSIGNMENTS_TABLE_NAME + " " +
                    "(id integer primary key, " + ASSIGNMENTS_COLUMN_NAME + " text, " + ASSIGNMENTS_COLUMN_TOTAL_POINTS
                    + " INTEGER, " + ASSIGNMENTS_COLUMN_CLASS_ID + " INTEGER)");

}

最佳答案

尝试下面的查询来创建一个新的列名 rowID:

Cursor cursor= db.rawQuery("SELECT *,"+CLASSES_TABLE_NAME +".rowid AS rowID"+" FROM "+CLASSES_TABLE_NAME , null);

在此查询之后,您可以从 rowID 列中获取真正的 rowid :

while (cursor.moveToNext()) {
        long chatRow=cursor.getLong(
                cursor.getColumnIndexOrThrow("rowID"));
}

关于java - Android中使用SQLite获取RowID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817574/

相关文章:

java - Gson 不将 JSONarray 元素转换为类对象

java - 调试 Android 应用程序(在 Eclipse 中)

android - 跨平台游戏开发

java:所有线程终止后关闭连接

java - 找不到Guava 20.0-SNAPSHOT Artifact

java - 调用父方法而不是被覆盖的方法

java - 如何在 Firestore 中获取特定集合?

Android 删除所有行或更新并删除旧行?

android - 在sqlite3中取得平衡

android - 创建一个 Android 中所有应用程序都可以访问的 sqlite 数据库