2017-03-06 5 views
0

Ich möchte nur wissen, wie ich verschiedene SQL-Abfragen auf separaten Threads oder separaten Prozessen ausführen kann. Beispiel.Wie verschiedene SQL-Abfragen auf verschiedenen Threads oder als andere Prozesse mit Java ausgeführt werden

Wenn ich eine SQL-Abfrage (SQL1) von JDBC sende und wenn es sehr lange dauert, sollte ich in der Lage sein, eine weitere SQL-Abfrage (SQL2) zu senden, die eine kürzere Zeit benötigt. Ich möchte, dass diese Abfrage in einem separaten Thread oder einem Prozess ausgeführt wird, damit sie nicht auf den Abschluss von SQL1 warten muss.

Ich hoffe, ich habe das Problem richtig erklärt.

Schätzen Sie eine schnelle Antwort.

Antwort

0

Der MySQL JDBC-Treiber (Connector/J) ist Thread speichern. Sie können also zwei Threads starten, die verschiedene Dinge in derselben Datenbank tun. Starten Sie einfach eine andere Verbindung für jeden Thread. Beachten Sie, dass eine SQL-Sperre für Thread1 Thread2 blockieren könnte.

Einfaches Beispiel. Verwenden Sie nicht die Old school Class.forName("com.mysql.jdbc.Driver"). JDBC4 erledigt das für Sie mit den Daten der Verbindungs-URL. Der Haupt-Thread startet beide Threads und wartet auf das Ende beider Threads. Die zwei Threads sind mit Dummy-Abfrage gefüllt.

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

Wenn Sie ResultSet wollen, schreiben Sie dann verschiedene Threads für verschiedene Abfragen erstellen. Ausführen ist ein Blockiervorgang. Sie müssen also verschiedene Threads zum Ausführen verschiedener Abfragen im selben Prozess erstellen.

Verwandte Themen