![](/img/trans.png)
[英]Inserting rows into a ResultSet without update method in Java JDBC
[英]Java Streaming JDBC resultset to read rows from a table keeping resultset open and without firing SQL again
我們有一個場景,當另一個應用程序正在向表中插入記錄時,我們將不斷從表中讀取數據。 根據我們當前的實現,我們將在一定時間后使用Spring的JdbcTemplate輪詢(在該表上執行SQL)新記錄。
我正在考慮可以實現流式ResultSet的某種方式,該方式可以繼續從ResultSet中讀取表數據而無需一次又一次地執行SQL。
編輯:從當前實現中添加代碼段:
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.