2013-04-05 281 views
0

我用大量的行檢索ResultSet。每一行都必須進行分析,所以我想分析一個新線程中的每一行(不要擔心:我不會同時啓動所有線程,例如連續說10)。整個ResultSet將專門用於從中讀取數據(所以它是一種靜態只讀表)。如何從Java的ResultSet中複製/克隆單個行?多線程實現

所以我想要做的是什麼:

ResultSet rs; 

public void loadResultSet(){ 

    ... 
    rs = _preparedStatement.executeQuery(); 

    int rowSize = 0; 

    while (rs.next()) { 
     rowSize++; 
    } 


    //this method starts 10 threads simultaneously 
    runThreads(rowSize); 

    ... 

} 

而且......

@Override 
public void run() { 


    //Unknown object that allows me to store a copy of a single row from ResultSet 
    Foo foo = rs.absolute(index); 

    //Then i can retrieve data just like a normal ResultSet 
    String s = foo.getString(1); 

    .... 
    .... 

} 

什麼建議嗎?

樣品非常感謝!謝謝!

+0

您正在每行運行一個線程,所以爲什麼要在resultSet上運行只是爲了得到一個計數?只需爲每一行啓動一個線程...如果您想限制線程,使用Executors服務並使用最大N的線程池(例如10個線程),然後向每個行的任務提供線程。 – 2013-04-05 00:47:05

+0

這不是重點。無論如何,我無法從多個線程讀取到不同位置的相同ResultSet,問題將是相同的 – Immortal 2013-04-05 13:19:46

+0

我會使用線程的唯一原因是每行處理花費大量時間,例如,你可以得到下一行,但是你在處理之前阻塞,沒有其他真正的好處,使這個多線程。你能解釋我錯過了什麼嗎? – 2013-04-05 14:04:39

回答

0

如果我是U,我寧願以執行獨立的線程查詢也很喜歡:

SELECT * FROM表名其中,mod(ID,經緯)=的threadId

只要給一個ID,每個線程並執行它們。有了這個,每個線程將有不同的數據進行處理

+0

我使用PostgreSQL,不幸的是,一件事像那樣似乎很慢。 – Immortal 2013-04-05 13:16:27

+0

nop,當然取決於你的餐桌。我們有一張桌子,每天有600萬件插入其中。我們實際上使用它的約束「插入日期」,但它對我們來說非常快 – Neron 2013-04-08 07:22:27