如何在jdbc中插入带有线程的数据?

时间:2013-06-20 12:43:46

标签: java multithreading jdbc prepared-statement

我想使用JDBC插入数据。 我写这段代码:

//我想在这里开始线程

      while(stmt_ver.next()){ 
        stmt_ver.setString(i, "test"+... ); 
        stmt_ver.executeBatch();
        connection_ver.commit(); 
}

//我想在这里完成线程

如何使用线程执行此操作?

4 个答案:

答案 0 :(得分:1)

new Thread(new Runnable(){ 
@Override public void run(){
//enter code here
   }
}).start();

编辑您想要并行插入多个线程...

有许多不同的可能性。

您应该阅读:并发(并发集合)和执行程序。

编辑2 我同意Thomas Uhrig的观点,在这里介绍线程可能更有害而不是祝福。 为什么认为它会有所帮助?

答案 1 :(得分:1)

你的问题很难回答。你问的很模糊。尽量清楚。发布所有必要的代码。尝试解释你做了什么以及你想做什么。

这里有一些暗示。如果您复制并通过它,它将无法运行,但我认为它应该明确您可以尝试的内容:

int i = 0;
while(i < columnCount ){

    // make a new statement
    Statement stmt_ver = new Statement();

    // set your data and make the statement ready
    stmt_ver.set...

    // make a new thread that executes your data
    // and let it run
    new Thread(){ 

        public void run(){

            stmt_ver.addBatch();  
            stmt_ver.executeBatch();
            connection_ver.commit(); 
        }
    }.start();

    i++; 
}

这是一个非常简单的解决方案。它将在每次迭代时启动一个线程。由于I / O通常需要一些时间,因此可以缩短代码的执行时间。但要注意 - 线程并不容易。这是一个非常简单,天真的解决方案。 它可能会导致更多问题而不是它解决。如果你不熟悉线程(似乎你不是),那就不要做了!

答案 2 :(得分:1)

你走了。更新了代码

的答案

螺纹课

public class MyThreadedClass extends Thread{

     //Do what I need here on a thread
     public void run(){
         //Do what I need here
     }
}

主要

//Main class
public static class MyProgramMain{

//Program main
public static void main(String[] args) {


                //Send 10 threads
        for (int i=0; i<10; i++){

                  //Init class (threaded)
                   MyThreadedClass threadedClass = new MyThreadedClass();

                   //Execute code in the class run() method
                   threadedClass.start();
            }
    }
}

答案 3 :(得分:0)

public class MockCommonDao  {

     ArrayList<ArrayList> listOlists = new ArrayList<ArrayList>();

     public List CommonInsert(List<Object> example)
        {
         List<Future<Object>> listOlists = null;
         ExecutorService executor = Executors.newFixedThreadPool(example.size());
         List<TransactionImpl> callingList = new ArrayList<MockCommonDao.TransactionImpl>();
         for (int i = 0; i < example.size(); i++) {
             TransactionImpl localImpl = new TransactionImpl(example.get(i));
             callingList.add(localImpl);
         }
         try {

             listOlists = executor.invokeAll(callingList);

         } catch (InterruptedException e) {

         }
         return listOlists;





        }
private class TransactionImpl implements Callable<Object>{
          private Object example;


          TransactionImpl(Object Criteria) {
                this.example = Criteria;

            }


            @Override
            public Object call() throws Exception {

            private class TransactionImpl implements Callable<Object>{
          private Object example;


          TransactionImpl(Object Criteria) {
                this.example = Criteria;

            }


            @Override
            public Object call() throws Exception {

            while(stmt_ver.next()){ 
        stmt_ver.setString(i, "test"+... ); 
        stmt_ver.executeBatch();
        connection_ver.commit(); 
}
      }
      }}
      }

此代码将根据您要为insert创建的线程的值进行同步插入.example.size()确定您要执行的插入操作的数量。希望你的意思是这个。