Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不知道id的情况下选择SQLIte DB的最后一个条目?_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

Java 如何在不知道id的情况下选择SQLIte DB的最后一个条目?

Java 如何在不知道id的情况下选择SQLIte DB的最后一个条目?,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我目前正在android上使用SQLite数据库。 我有一个简单的数据库,有4列(id、c1、c2、c3) 我有一个方法返回特定列的最后一个条目。我不知道条目的id,但我知道它总是最新的 目前我是这样做的: public int Select(String column){ Log.i(TAG, column +" request"); SQLiteDatabase db = this.getReadableDatabase(); Cursor

我目前正在android上使用SQLite数据库。 我有一个简单的数据库,有4列(id、c1、c2、c3)

我有一个方法返回特定列的最后一个条目。我不知道条目的id,但我知道它总是最新的

目前我是这样做的:

 public int Select(String column){
    Log.i(TAG, column +" request");
    SQLiteDatabase db = this.getReadableDatabase();


    Cursor cs = db.query(table, new String[]{column,null,null,null},null,null,null,null,null);
    if(cs!=null && cs.moveToFirst()){
        cs.moveToLast();
        return Integer.parseInt(cs.getString(cs.getColumnIndex(column)));
    }
}
在运行时,cs总是空的,我不知道为什么。 我做错了什么


提前感谢

如果要获取表中的最后一个条目,则必须有一列指示插入行的顺序,例如在处创建的日期时间列,然后可以执行以下操作:

SELECT columnname FROM tablename ORDER BY created_at DESC LIMIT 1
如果没有这样的列,则可以使用列
id
,但前提是您已将其定义为
整型主键AUTOINCREMENT
,(即使没有关键字
AUTOINCREMENT
,也无法确定顺序,因为在删除和插入后可能会重复使用id):

因此,您的代码必须是:

public Integer select(String columnName) {
    SQLiteDatabase db = this.getReadableDatabase();
    String sql = "SELECT " + columnName + " FROM " + tableName + " ORDER BY id DESC LIMIT 1";
    Cursor cs = db.rawQuery(sql, null);
    Integer result = null;
    if(cs.moveToFirst()) {
        try {
            result = cs.getInt(0); // the query returns only 1 column so it is safe to use its index
        } catch (Exception e) {
            Log.i(TAG, columnName + " Invalid integer value");
        } 
    }
    cs.close();
    db.close();
    return result;
}
您可以使用上述方法,如:

Integer value = select("yourColumnName");
如果表为空或返回的值不是有效整数,它将返回最后一个条目或
null

我使用
Integer
作为方法
select()
的返回类型,因为您也使用它。

如果列具有不同的数据类型,则必须相应地对其进行更改。

看起来类似于。希望有帮助。我想您可以在查询中使用ORDER BY并获取第一项的id。谢谢。原来我的问题是数据库类的构造函数,但我从您的回答中学到了一些东西:)
Integer value = select("yourColumnName");