繁体   English   中英

有没有办法从 android 工作室中的 sqlite 数据库中检索一行,并将该行放入 object 中?

[英]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 )。

  • 注意
    • flight_resolved 是变量 FLIGHTS 解析为的任何内容。
    • column_id_resolved 是变量 COLUMN_ID 解析为的任何内容。
    • the_passed_int 是传递给方法的 int id的值。
      • 请注意,该值实际上是绑定的,即它安全地替换了? 与号码。 通过安全,这意味着防止了 SQL 注入。

查询方法返回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.

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