gpt4 book ai didi

mysql - 如何使用 Java 在不同线程或不同进程上运行不同的 sql 查询

转载 作者:行者123 更新时间:2023-11-29 19:17:26 25 4
gpt4 key购买 nike

我只是想知道如何在单独的线程或单独的进程上运行不同的 SQL 查询。示例:

如果我从 JDBC 发送一个 SQL 查询 (SQL1),并且运行时间很长,我应该能够发送另一个 SQL 查询 (SQL2),该查询可能需要更短的时间才能完成其执行。我希望这个查询在单独的线程或进程上运行,这样它就不必等待 SQL1 完成。

最佳答案

MySQL JDBC 驱动程序 (Connector/J) 是线程保存的。因此,您可以启动两个线程在同一个数据库上执行不同的操作。只需在每个线程上启动不同的连接即可。请记住,线程 1 上的 SQL 锁可能会阻塞线程 2。

简单的例子。不要使用老派的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();
}
}
}

关于mysql - 如何使用 Java 在不同线程或不同进程上运行不同的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com