[英]Is there a way to retreitve a row from an sqlite database in android studio, and put the row into an object?
我知道您可以插入数据库,方法是从 object 获取所有数据,并将它们放入 contentvalues,然后使用它插入数据库。 但我想知道是否有类似的东西反过来? 在哪里可以从数据库中检索一行,并轻松地将其放入 object?
这是回答您自己的问题的快速方法。 请不要误解我的权宜之计:我很想设计一个应用程序来解决您的问题,但我是一名学生并且自己想要一份工作。 对我来说这将是一个非常耗时的提议,因为我还没有准备好它,尽管它似乎是 web 刮刀的共同特征。 此外,这取决于您所说的“对象”是什么意思,因为该术语似乎涵盖了各种各样的对象。
https://docs.oracle.com/en/java/
https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/
请找时间给我一些远程职业建议。
当然有。 但是不是直接的,而是基本上与从 object 保存相反。
也就是说,您使用SELECT
查询(而不是INSERT
)从数据库中提取数据到Cursor (一个 object 保存数据但不是您的对象)。
Cursor 保存(缓冲)对应于SELECT
ed 数据的行。 您移动到相应的行并从该行检索数据。
这是从最近提供的答案中返回 FlightModel object 的方法示例:-
@SuppressLint("Range") // suppress Bug/issue with getColumnIndex
public FlightsModel getFlightById(int id) {
FlightsModel rv;
SQLiteDatabase db = this.getWritableDatabase();
// Uses the query convenience method rather than raw query
Cursor csr = db.query(FLIGHTS,null,COLUMN_ID+"=?",new String[]{String.valueOf(id)},null,null,null);
if (csr.moveToFirst()) {
rv = new FlightsModel(
csr.getInt(csr.getColumnIndex(COLUMN_ID)),
csr.getString(csr.getColumnIndex(COLUMN_DESTINATION)),
csr.getDouble(csr.getColumnIndex(COLUMN_PRICE)),
csr.getString(csr.getColumnIndex(COLUMN_DEPARTURE_TIME)),
csr.getString(csr.getColumnIndex(COLUMN_ARRIVAL_TIME)),
csr.getString(csr.getColumnIndex(COLUMN_DURATION)),
csr.getInt(csr.getColumnIndex(COLUMN_AVAILABLE_SEATS))
);
} else {
rv = new FlightsModel();
}
csr.close();
// No need to close the database (inefficient to keep opening and clsoing db)
return rv;
}
该方法传递了一个足以标识数据的 int,因为它唯一地标识了保存数据的行。
SELECT
查询是通过便捷查询方法构建的(它将是SELECT * FROM flights_resolved WHERE column_id_resolved=the_passed_int
)。
查询方法返回Cursor 。
尝试使用Cursor moveToFirst方法移动到Cursor中的第一行(在这种情况下,预计只有一行)。
如果有一行,则通过根据行中的 position(索引)提取值来构建航班 model。 由 Cursor getColumnIndex方法计算/返回的位置/索引,该方法将列名作为参数。
如果未返回任何行,则改为构建空的 FlightModel object。
然后将生成的实例化的 FlightModel object 返回给调用者。 调用者应检查返回的 object 并处理空 FlightModel 的情况。
Android 还具有Room ,它在 SQLite 上提供抽象层,并使用 object 面向方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.