我只想知道如何在單獨的線程或單獨的進程上運行不同的SQL查詢。例。如何使用Java在不同線程或不同進程上運行不同的sql查詢
如果我從JDBC發送一個sql查詢(SQL1),並且如果它需要很長時間才能運行,我應該能夠發送另一個SQL查詢(SQL2),這可能需要較短的時間來完成它的執行。我希望這個查詢在單獨的線程或進程上運行,以便它不必等待SQL1完成。
希望我已經正確地解釋了這個問題。
感謝您的快速回復。
我只想知道如何在單獨的線程或單獨的進程上運行不同的SQL查詢。例。如何使用Java在不同線程或不同進程上運行不同的sql查詢
如果我從JDBC發送一個sql查詢(SQL1),並且如果它需要很長時間才能運行,我應該能夠發送另一個SQL查詢(SQL2),這可能需要較短的時間來完成它的執行。我希望這個查詢在單獨的線程或進程上運行,以便它不必等待SQL1完成。
希望我已經正確地解釋了這個問題。
感謝您的快速回復。
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();
}
}
}
如果你想要ResultSet,然後寫爲不同的查詢創建不同的線程。執行是一個阻塞過程。所以你必須創建不同的線程來在同一個進程中運行不同的查詢。