java并发执行sql示例
时间: 2023-07-12 15:42:28 浏览: 93
在Java中,可以使用并发库中的线程来执行SQL语句,从而实现并发执行SQL的功能。下面是一个简单的Java并发执行SQL的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ConcurrentSql {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USER = "root";
private static final String PASSWORD = "password";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
conn.setAutoCommit(false);
stmt = conn.prepareStatement("UPDATE mytable SET value = ? WHERE id = ?");
for (int i = 0; i < 10; i++) {
final int id = i;
final String value = "value_" + i;
// 使用线程并发执行SQL语句
Thread thread = new Thread(new Runnable() {
public void run() {
try {
PreparedStatement stmt = conn.prepareStatement("UPDATE mytable SET value = ? WHERE id = ?");
stmt.setString(1, value);
stmt.setInt(2, id);
stmt.executeUpdate();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
thread.start();
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
在上面的代码中,我们首先创建了一个线程池,然后使用线程池并发执行SQL语句。每个线程执行的SQL语句都是相同的,只是参数不同。在执行SQL语句之前,需要先获取数据库连接,并设置自动提交为false,以便在所有线程执行完毕后,一次性提交所有的SQL语句。
需要注意的是,在执行SQL语句时,需要使用PreparedStatement对象,并使用占位符来设置参数,以避免SQL注入攻击。另外,由于多个线程会同时访问同一个数据库连接和PreparedStatement对象,需要进行线程同步,以避免多个线程同时执行同一个SQL语句的情况。
阅读全文