java - 我在 SQLite 中正确使用 Cursor 吗?
问题描述
我是第一次“试验”Android Studio 和 SQLite。打开应该显示我的 SQL 查询值的新活动时,我的应用程序屏幕变白并冻结。
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper (Context context) {
super(context,"book.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table books (ID INTEGER NOT NULL PRIMARY KEY, " +
"BOOK_TITLE TEXT NOT NULL, BOOK_CATEGORY TEXT NOT NULL, " +
"BOOK_DESCRIPTION TEXT NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists books");
onCreate(db);
}
public boolean insertData(String book_title_, String book_category_, String book_description_)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cValues = new ContentValues();
cValues.put("BOOK_TITLE", book_title_);
cValues.put("BOOK_CATEGORY", book_category_);
cValues.put("BOOK_DESCRIPTION", book_description_);
long result = db.insert("book", null, cValues);
if (result == -1)
return false;
return true;
}
public Cursor getAllData()
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("SELECT * FROM book", null);
return res;
}
}
我发现问题在于从另一个类调用 getAllData() 函数。按照我的逻辑,一切都应该正常吗?我虽然问题出在我的查询中,但根据谷歌的说法,我做得很好。有什么建议么?
解决方案
试试这个方法。这是非常有效的方法:
public List<Movie> getAllData()
{
List<Movie> movies_list = new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("SELECT * FROM movie_collection", null);
while(res.moveToNext())
{
movies_list.add(new Movie(res.getString(1)+"\n", res.getString(2)+"\n", res.getString(3)+"\n", R.drawable.gladiator));
}
res.close();
return movies_list;
}
在 viewAll() 方法中:
public void viewAll()
{
movies_list = movie_database.getAllData();
// do whatever you want
}
推荐阅读
- kotlin - 什么时候调用对象的 init 块?
- android - 在通知区域中收听“黑暗主题”切换并收到更改通知
- python - 带有硬币系统的 discord.py 机器人中的 UnboundLocalError
- python - 如何计算每行每列的颜色像素值
- python - Django TypeError:序列项0:预期的str实例,找到NoneType
- python - KeyError:“[Float64Index([34.62365962451697, 30.28671076822607, 35.84740876993872], dtype='float64')] 中没有 [列]”
- google-sheets-formula - 从谷歌表格中的 FILTER 函数返回最后一个值
- excel - 提取与 IF 语句(非嵌套)一起使用的所有逻辑测试条件并打印到单独的列
- android - “公共构造函数 string() 定义的参数太多” Kotlin 问题
- swift - Swift - 根据其内容自动布局 UILabel 高度