写一个Java多线程操作MySQL并返回执行结果的实例。
时间: 2024-03-20 09:41:02 浏览: 18
以下是一个Java多线程操作MySQL并返回执行结果的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MySQLThread implements Runnable {
private String url;
private String user;
private String password;
private String sql;
private String result;
public MySQLThread(String url, String user, String password, String sql) {
this.url = url;
this.user = user;
this.password = password;
this.sql = sql;
}
public String getResult() {
return result;
}
@Override
public void run() {
try {
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
result = rs.getString(1);
}
System.out.println(Thread.currentThread().getName() + "执行SQL成功");
} catch (SQLException e) {
System.out.println(Thread.currentThread().getName() + "执行SQL失败:" + e.getMessage());
}
}
}
```
上面的代码与之前的示例代码类似,只是多了一个getResult()方法,用于获取执行结果。在run()方法中,执行传入的SQL语句,并将查询结果存储到result字段中。
调用MySQLThread的示例代码:
```java
public class Test {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "123456";
String sql = "SELECT name FROM user WHERE age = 20";
MySQLThread[] threads = new MySQLThread[10];
for (int i = 0; i < 10; i++) {
threads[i] = new MySQLThread(url, user, password, sql);
new Thread(threads[i], "线程" + i).start();
}
for (int i = 0; i < 10; i++) {
try {
threads[i].join();
System.out.println("线程" + i + "执行结果:" + threads[i].getResult());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
上面的代码创建了10个线程,每个线程都执行一条SQL语句,查询年龄为20的用户的姓名。在主线程中,依次等待每个线程执行完毕,并输出每个线程的执行结果。注意,这里的SQL语句是硬编码的,实际应用中应该由外部传入,以便动态生成SQL语句。