2017-03-06 61 views
0

我只想知道如何在單獨的線程或單獨的進程上運行不同的SQL查詢。例。如何使用Java在不同線程或不同進程上運行不同的sql查詢

如果我從JDBC發送一個sql查詢(SQL1),並且如果它需要很長時間才能運行,我應該能夠發送另一個SQL查詢(SQL2),這可能需要較短的時間來完成它的執行。我希望這個查詢在單獨的線程或進程上運行,以便它不必等待SQL1完成。

希望我已經正確地解釋了這個問題。

感謝您的快速回復。

回答

0

MySQL JDBC驅動程序(連接器/ J)是線程保存。所以你可以啓動兩個線程在同一個數據庫上做不同的事情。只需在每個線程上啓動不同的連接。請記住,thread1上的SQL鎖可能會阻塞thread2。

簡單的例子。不要使用舊學校Class.forName("com.mysql.jdbc.Driver")。 JDBC4將爲您提供來自連接URL的數據。主線程將啓動兩個線程並等待兩個線程完成。這兩個線程充滿了虛擬查詢。

public class TestThreads { 
    public static class Thread1 implements Runnable { 
     @Override 
     public void run() { 
      try { 
       Connection connection = DriverManager 
         .getConnection("jdbc:mysql://localhost/test?" 
           + "user=myuser&password=mypassword"); 

       Statement statment = connection.createStatement(); 

       statment.executeQuery("select * from `table1`"); 

       [...] 

      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public static class Thread2 implements Runnable { 
     @Override 
     public void run() { 
      try { 
       Connection connection = DriverManager 
         .getConnection("jdbc:mysql://localhost/test?" 
           + "user=myuser&password=mypassword"); 

       Statement statment = connection.createStatement(); 

       statment.executeQuery("select * from `table2`"); 

       [...] 

      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Thread thread1 = new Thread(new Thread1()); 
     Thread thread2 = new Thread(new Thread2()); 

     thread1.start(); 
     thread2.start(); 

     try { 
      thread1.join(1000000); 
      thread2.join(1000000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

如果你想要ResultSet,然後寫爲不同的查詢創建不同的線程。執行是一個阻塞過程。所以你必須創建不同的線程來在同一個進程中運行不同的查詢。

相關問題