简体   繁体   English

Android / Java:如何在sqlite中获取最后一行的值?

[英]Android / Java: How to get last row value in sqlite?

Hello I am using a sqlite database in my android application, and I have question: I am trying to get the last value text(thats the collumn) from the last row from the table TABLE_XYZ... but it does not work.. i am using the following code...what am I doing wrong? 您好,我在Android应用程序中使用一个sqlite数据库,但我有一个问题:我正在尝试从表TABLE_XYZ的最后一行获取最后一个值文本(即列)。但是它不起作用。正在使用以下代码...我在做什么错?

another question is, how can I return two values instead of only one, when I want to get several values from the last row like column text and message? 另一个问题是,当我想从最后一行获取多个值(如列文本和消息)时,如何返回两个值而不是仅返回一个?

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) ); 

EDIT: 编辑:

i hade some errors in my Query,, i fixed it, but still have errors: 我在查询中遇到一些错误,我已将其修复,但仍然有错误:

    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; 

while debugging I can see that cursor does have the right values inside... but when i try to get the column value with this command "cursor.getString( cursor.getColumnIndex(KEY_TEXT );"... it does not work... 在调试时,我可以看到游标内部确实具有正确的值...但是当我尝试使用此命令“ cursor.getString(cursor.getColumnIndex(KEY_TEXT);” ...来获取列值时,...不起作用。 。

you are closing cursor before getting it's value 您正在关闭游标,然后再获得其价值

try this : 尝试这个 :

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;

From the android documentation: http://developer.android.com/reference/android/database/Cursor.html 从android文档中: http : //developer.android.com/reference/android/database/Cursor.html

abstract void close() Closes the Cursor, releasing all of its resources and making it completely invalid. abstract void close()关闭游标,释放其所有资源,并使它完全无效。

You are closing the cursor before returningthe string. 返回字符串之前,您正在关闭游标。

Like @whatever5599451 said you should not close the cursor before you get value. 就像@ whatever5599451所说的那样,在获得价值之前,不要关闭游标。 Also try a query like this: 也尝试这样的查询:

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

You can specify the columns also specify to return only 1 row. 您可以指定列,也可以指定仅返回1行。

This will bring back only the column you are ordering by you can also specify more columns example: 这只会带回您要订购的列,也可以指定更多列示例:

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

* means select all columns *表示选择所有列

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

@Steve: do this: @Steve:这样做:

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

then you get just one String with the last record containing just the right column 那么您只会得到一个字符串,最后一条记录仅包含右列

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM