从数据库的表里面批量查到3000条数据,然后把这三千条数据批量插入clickhouse库的表中,然后把查找到数据从mysql数据库里面删除,注意要保证插入成功才能进行删除,用java代码写出来
时间: 2024-05-04 21:16:42 浏览: 94
好的,以下是Java代码实现:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BatchInsertAndDelete {
public static void main(String[] args) {
Connection mysqlConn = null;
Connection clickhouseConn = null;
PreparedStatement selectStmt = null;
PreparedStatement insertStmt = null;
PreparedStatement deleteStmt = null;
ResultSet resultSet = null;
try {
// 连接MySQL数据库
mysqlConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
mysqlConn.setAutoCommit(false); // 设置手动提交事务
// 执行查询操作
selectStmt = mysqlConn.prepareStatement("SELECT * FROM your_table LIMIT 3000");
resultSet = selectStmt.executeQuery();
List<String> dataList = new ArrayList<>(); // 存储查询结果
while (resultSet.next()) {
String data = resultSet.getString("data"); // 根据实际表结构修改
dataList.add(data);
}
// 连接ClickHouse数据库
clickhouseConn = DriverManager.getConnection("jdbc:clickhouse://localhost:8123/testdb");
insertStmt = clickhouseConn.prepareStatement("INSERT INTO your_table (data) VALUES (?)");
deleteStmt = mysqlConn.prepareStatement("DELETE FROM your_table WHERE id=?");
for (String data : dataList) {
// 执行插入操作
insertStmt.setString(1, data);
insertStmt.addBatch();
}
insertStmt.executeBatch(); // 批量提交插入操作
clickhouseConn.commit(); // 提交ClickHouse的事务
for (int i = 1; i <= dataList.size(); i++) {
// 执行删除操作
deleteStmt.setInt(1, i);
deleteStmt.addBatch();
}
deleteStmt.executeBatch(); // 批量提交删除操作
mysqlConn.commit(); // 提交MySQL的事务
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (selectStmt != null) {
selectStmt.close();
}
if (insertStmt != null) {
insertStmt.close();
}
if (deleteStmt != null) {
deleteStmt.close();
}
if (mysqlConn != null) {
mysqlConn.close();
}
if (clickhouseConn != null) {
clickhouseConn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
上述代码做了以下工作:
1. 连接MySQL数据库,并从数据库表中查询前3000条数据;
2. 连接ClickHouse数据库,并批量插入查询结果;
3. 提交ClickHouse的事务,再从MySQL数据库中批量删除已插入到ClickHouse的数据;
4. 提交MySQL的事务。
需要注意的是,上述代码仅供参考,具体的代码实现需根据数据库表结构、插入数据大小等实际情况进行调整。同时,该代码也没有加入必要的异常处理,实际应用中需要加入一些异常处理代码以确保程序的健壮性和稳定性。
阅读全文