第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在 java 中傳遞結(jié)果集?

是否可以在 java 中傳遞結(jié)果集?

慕無忌1623718 2022-10-26 17:18:47
我正在嘗試創(chuàng)建一個命令,我可以將不同的查詢發(fā)送到 SQLite / Mysql DB,并將結(jié)果集返回給正在調(diào)用的任何函數(shù)。它需要能夠處理是 2 列還是 15 列。以下不起作用 - 大概是因為它關(guān)閉了結(jié)果集/連接,但我不知道該怎么做。想法?public static ResultSet queryDB(String query) {    try {        Connection connection = DriverManager.getConnection("jdbc:sqlite:" + Settings.SQLITE_DB_PATH);        Statement statement = connection.createStatement();        ResultSet resultSet = statement.executeQuery(query);        resultSet.close();        statement.close();        connection.close();        return resultSet;    } catch (SQLException ex) {        Logger.getLogger(SQLInterp.class.getName()).log(Level.SEVERE, null, ex);    }    return null;}
查看完整描述

1 回答

?
慕斯709654

TA貢獻1840條經(jīng)驗 獲得超5個贊

你基本上有3個選擇:

  1. 不要關(guān)閉方法中的ResultSet,StatementConnection,將執(zhí)行此操作的責任移交給調(diào)用者。

    不推薦,因為它容易出錯,并且會破壞格式良好的代碼結(jié)構(gòu)范例。

  2. 按照Jacob G.的建議,傳入具有處理數(shù)據(jù)所需邏輯的對象。

    例如使用 Java 8+ Consumer

public static void queryDB(String query, Consumer<ResultSet> processor) {

    try (

        Connection connection = DriverManager.getConnection("jdbc:sqlite:" + Settings.SQLITE_DB_PATH);

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(query);

    ) {

        processor.accept(resultSet);

    } catch (SQLException ex) {

        Logger.getLogger(SQLInterp.class.getName()).log(Level.SEVERE, null, ex);

    }

}

然后像這樣調(diào)用它:


SQLInterp.queryDB("SELECT * FROM foo", rs -> {

    while (rs.next()) {

        // process data here

    }

});

以通用數(shù)據(jù)結(jié)構(gòu)將所有數(shù)據(jù)讀入內(nèi)存,例如List<Map<String, Object>>:


這當然假設查詢對每一列都有很好的唯一名稱。


public static List<Map<String, Object>> queryDB2(String query) {

    try (

        Connection connection = DriverManager.getConnection("jdbc:sqlite:" + Settings.SQLITE_DB_PATH);

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(query);

    ) {

        ResultSetMetaData metaData = resultSet.getMetaData();

        int columnCount = metaData.getColumnCount();

        String[] name = new String[columnCount];

        for (int i = 0; i < columnCount; i++)

            name[i] = metaData.getColumnLabel(i + 1);

        List<Map<String, Object>> rows = new ArrayList<>();

        while (resultSet.next()) {

            Map<String, Object> row = new LinkedHashMap<>();

            for (int i = 0; i < columnCount; i++)

                row.put(name[i], resultSet.getObject(i + 1));

            rows.add(row);

        }

        return rows;

    } catch (SQLException ex) {

        Logger.getLogger(SQLInterp.class.getName()).log(Level.SEVERE, null, ex);

    }

}


查看完整回答
反對 回復 2022-10-26
  • 1 回答
  • 0 關(guān)注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號