2013-04-05 283 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