簡體   English   中英

Java Streaming JDBC結果集可從表中讀取行,從而保持結果集處於打開狀態,而無需再次觸發SQL

[英]Java Streaming JDBC resultset to read rows from a table keeping resultset open and without firing SQL again

我們有一個場景,當另一個應用程序正在向表中插入記錄時,我們將不斷從表中讀取數據。 根據我們當前的實現,我們將在一定時間后使用Spring的JdbcTemplate輪詢(在該表上執行SQL)新記錄。

我正在考慮可以實現流式ResultSet的某種方式,該方式可以繼續從ResultSet中讀取表數據而無需一次又一次地執行SQ​​L。

編輯:從當前實現中添加代碼段:

String SQL = "SELECT * FROM ACTIONSTATUS WHERE STATUS = 'FAILED' and ALERTID > :alertId";

public static void fetchActionStatus(NamedParameterJdbcTemplate template, HashMap<String, String> paramMap, String fetchSql) throws Exception{
    int i = 0;
    List<Map<String, Object>> results = null;
    while(true){
        if(results == null || results.size() == i){
            results = template.queryForList(SQL, paramMap);
            i = 0;
        }else{
            Map<String, Object> row = results.get(i);

            // SOME DATA PROCESSING WHICH MAY TAKE XX MILISEC.
            System.out.println("ALERTID:     " + row.get("ALERTID").toString() + "     ACTIONID:     " + row.get("ACTIONID").toString() + "     STATUS:     " +row.get("STATUS").toString());
            Thread.sleep(100);
            paramMap.put("alertId", row.get("ALERTID").toString());
            i++;
        }
    }

}

其他一些應用程序以隨機​​間隔在ACTIONSTATUS表中插入新記錄,我們需要連續監視ACTIONSTATUS表以處理所有記錄。 我們當前的實施效果很好,沒有任何問題。 我們正在尋找其他解決方案,以優化此方法以某種方式流ResultSet而不一次又一次執行SQL。

我認為沒有辦法用JDBC做到這一點。

從SQL的角度來看,由於事務隔離的問題,它可能存在問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM