簡體   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