【问题标题】:Android / Java: How to get last row value in sqlite?Android / Java:如何在sqlite中获取最后一行值?
【发布时间】:2015-01-03 22:49:04
【问题描述】:

您好,我在我的 android 应用程序中使用 sqlite 数据库,我有疑问: 我正在尝试从表 TABLE_XYZ 的最后一行获取最后一个值文本(即列)...但它不起作用..我正在使用以下代码...我做错了什么?

另一个问题是,当我想从最后一行(如列文本和消息)中获取多个值时,如何返回两个值而不是一个值?

private static final String KEY_MESSAGE = "message";
private static final String KEY_TEXT = "text";

...

String selectQuery= "SELECT * FROM " + TABLE_XYZ+" ORDER BY column DESC LIMIT 1";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
     cursor.close();
    return cursor.getString( cursor.getColumnIndex(KEY_TEXT) ); 

编辑:

我的查询中有一些错误,我已修复,但仍有错误:

    String selectQuery= "SELECT * FROM " + TABLE_XYZ +  " ORDER BY " +  KEY_TEXT+ " DESC LIMIT 1";
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    String str =  cursor.getString( cursor.getColumnIndex(KEY_TEXT );
    cursor.close();
    return str; 

在调试时,我可以看到游标内部确实有正确的值...但是当我尝试使用此命令“cursor.getString(cursor.getColumnIndex(KEY_TEXT);”获取列值时...它没有工作...

【问题讨论】:

  • 如果你只想要 1 条记录,你应该使用 LIMIT 查看我的答案

标签: java android sqlite


【解决方案1】:

你在获得它的价值之前关闭光标

试试这个:

String selectQuery= "SELECT * FROM " + TABLE_XYZ+" ORDER BY column DESC LIMIT 1";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
String str = "";
if(cursor.moveToFirst())
    str  =  cursor.getString( cursor.getColumnIndex(KEY_TEXT) );
cursor.close();
return str;

【讨论】:

  • 谢谢你的帮助——我改变了我的代码(见编辑)——但它仍然不起作用..我认为命令“cursor.getString(cursor.getColumnIndex(KEY_TEXT);”是错误的获取列值。
  • 查看我的更新答案。你应该在获得价值之前添加cursor.moveToFirst()
【解决方案2】:

来自安卓文档:http://developer.android.com/reference/android/database/Cursor.html

抽象 void close() 关闭光标,释放其所有资源并使其完全无效。

在返回字符串之前关闭光标。

【讨论】:

  • 是的,这是错误之一——谢谢你我修复了那个:)
【解决方案3】:

就像@whatever5599451 所说,你不应该在获得价值之前关闭光标。也可以尝试这样的查询:

String selectQuery = "SELECT column FROM " + TABLE_XYZ + 
                     " ORDER BY column DESC LIMIT 1";

您可以指定列也可以指定只返回 1 行。

这将只带回您订购的列,您还可以指定更多列示例:

String selectQuery = "SELECT column, column2, column3 FROM " + TABLE_XYZ + 
                     " ORDER BY column DESC LIMIT 1";

* 表示选择所有列

【讨论】:

  • @CL 是我的错应该是 LIMIT 1 我改了
  • 谢谢,我更改了我的代码 - 但仍然有错误:S 请参阅我的编辑
【解决方案4】:

要获取最后一列,请使用列名而不是“*”(* 表示全部,所有字段)

【讨论】:

  • 为什么不获取一个带*的数组,并取数组中的最后一个元素?
  • with * 你得到一行的所有列,既然你不需要所有的列......为什么从 db 中获取不必要的数据?
  • 好点,也许你可以展示如何做到这一点。 “你可以做 X”通常不如“这就是你做 X”的答案。
  • String selectQuery= "SELECT " + KEY_TEXT + " FROM " + TABLE_XYZ + " ORDER BY " + KEY_TEXT+ " DESC LIMIT 1"; @Verdolino:谢谢
【解决方案5】:

@Steve:这样做:

String selectQuery= "SELECT " + KEY_TEXT + " FROM " + TABLE_XYZ + " ORDER BY " + KEY_TEXT+ " DESC LIMIT 1";

那么你只得到一个字符串,最后一条记录只包含正确的列

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多