我的应用程序的这个恶意代码:
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM Note where Username = '"+acc+"'", null);
//Cursor cursor = db.rawQuery("SELECT * FROM Note ", null);
if (cursor.moveToFirst()) {
do {
Note_DTO note = new Note_DTO();
note.setId(Integer.parseInt(cursor.getString(0)));
note.setDate(cursor.getString(1));
note.setUser(cursor.getString(2));
note.setContent(cursor.getString(3));
NoteList.add(note);
} while (cursor.moveToNext());
}
此函数不返回任何内容,但在调试模式下,每个项目都已设置。 如果它返回我选择的列表,我不明白为什么以及它不是。谢谢你的帮助。
答案 0 :(得分:1)
使用getReadableDatabase()
进行查询,如下所示。
SQLiteDatabase db = this.getReadableDatabase();
请阅读SQLiteOpenHelper
getReadableDatabase()
文档here
创建和/或打开数据库。这将是返回的同一对象 by getWritableDatabase()除非出现一些问题,比如一个完整的磁盘, 要求数据库以只读方式打开。在那种情况下,a 将返回只读数据库对象。如果问题得到解决,a 将来调用getWritableDatabase()可能会成功,在这种情况下 将关闭只读数据库对象和读/写对象 将来会被退回。
阅读SQLiteOpenHelper
的<{1}}文档here
创建和/或打开将用于阅读和的数据库 写作。第一次调用它时,将打开数据库 和onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int) 和/或onOpen(SQLiteDatabase)将被调用。
成功打开后,数据库将被缓存,因此您可以调用它 每次需要写入数据库时的方法。 (确保 当您不再需要数据库时调用close()。)错误,例如错误 权限或完整磁盘可能导致此方法失败,但未来 如果问题得到解决,尝试可能会成功。
根据getWritableDatabase()
文档,它明确提到它将缓存数据库。因此,可以从数据库的缓存副本中检索数据。与确保在交易后关闭数据库连接相同。
最后您的代码将是这样的
getWritableDatabase()
答案 1 :(得分:0)
试试这个
SQLiteDatabase database = this.getReadableDatabase();
String selectQuery = "SELECT * FROM Note where Username " + " LIKE '%" + acc + "%'";
Cursor cursor = database.rawQuery(selectQuery, null);
int count = cursor.getCount();
database.close();
if(count==0)
{
return result;
}
else
{
if (cursor.moveToFirst()) {
do {
Note_DTO note = new Note_DTO();
note.setId(Integer.parseInt(cursor.getString(0)));
note.setDate(cursor.getString(1));
note.setUser(cursor.getString(2));
note.setContent(cursor.getString(3));
NoteList.add(note);
} while (cursor.moveToNext());
}