您好我在我的Android应用程序中使用sqlite数据库,我有疑问: 我试图从表TABLE_XYZ的最后一行获取最后一个值文本(那就是collumn)但是它不起作用..我正在使用以下代码......我做错了什么?
另一个问题是,当我想从列文本和消息的最后一行获取多个值时,如何返回两个值而不是一个?
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);" ......它不起作用......
答案 0 :(得分:3)
你在获得它之前关闭光标的值
试试这个:
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;
答案 1 :(得分:1)
来自android文档:http://developer.android.com/reference/android/database/Cursor.html
abstract void close() 关闭Cursor,释放所有资源并使其完全无效。
您在返回字符串之前关闭光标。
答案 2 :(得分:1)
喜欢@ 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";
*
表示选择所有列
答案 3 :(得分:0)
要获取最后一列,请使用列的名称而不是" *" (*表示所有,所有字段)
答案 4 :(得分:0)
@Steve:这样做:
String selectQuery= "SELECT " + KEY_TEXT + " FROM " + TABLE_XYZ + " ORDER BY " + KEY_TEXT+ " DESC LIMIT 1";
然后你得到一个字符串,最后一个记录只包含正确的列