Java 如何在不知道id的情况下选择SQLIte DB的最后一个条目?
我目前正在android上使用SQLite数据库。 我有一个简单的数据库,有4列(id、c1、c2、c3) 我有一个方法返回特定列的最后一个条目。我不知道条目的id,但我知道它总是最新的 目前我是这样做的: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
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");