使用JDBC的方式
- 获取数据库连接;
- 获取数据库中所有的表名;
- 执行sql删除数据
package com.ttsx.demo.test;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 批量删除数据库所有表中的数据
* @author sunjilong
* @date 2021/8/30 14:25
* @info
*/
public class SqlTest2 {
/**
* 获取指定数据库中的所有表名
* @param con
* @return
* @throws SQLException
*/
public static List<String> getTableNameByCon(Connection con) throws SQLException {
DatabaseMetaData meta = con.getMetaData();
ResultSet rs = meta.getTables(null, null, null,
new String[]{"TABLE"});
//存放数据库中的所有表名
List<String> strings = new ArrayList<>();
while (rs.next()) {
strings.add(rs.getString(3));
}
return strings;
}
/**
* 查询剩余条数
* @param tableName
* @param conn
* @return long
* @throws SQLException
*/
private static long queryCount(Connection conn,String tableName) throws SQLException {
String sql = "SELECT COUNT (*) as cnt FROM ? ";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, tableName);
ResultSet rs = pstmt.executeQuery(sql);
while (rs.next()) {
long count = rs.getInt("cnt");
return count;
}
return 0L;
}
public static void main(String[] args) {
String driverClassName = "com.mysql.jdbc.Driver"; //启动驱动
String url = "jdbc:mysql://localhost:3306/test"; //设置连接路径
String username = "root"; //数据库用户名
String password = "root"; //数据库连接密码
Connection con = null; //连接
PreparedStatement pstmt = null; //使用预编译语句
ResultSet rs = null; //获取的结果集
Long totalDeleted =0L;
Long expiredCount=0L;
try {
Class.forName(driverClassName); //执行驱动
con = DriverManager.getConnection(url, username, password); //获取连接
//获取指定数据库中的所有表名
List<String> tableNameByCon = getTableNameByCon(con);
//开始时间
long begin = new Date().getTime();
for (String s : tableNameByCon) {
String sql = "delete from "+s+" limit 100000"; //一次删除10万条
pstmt = con.prepareStatement(sql);
//循环批量删除
do {
// 返回值代表收到影响的行数
int result = pstmt.executeUpdate();
//已经删除条数
totalDeleted +=result;
//还有条数
expiredCount = queryCount(con,s);
} while (expiredCount > 0);
}
//结束时间
long end = new Date().getTime();
System.out.println("删除完成,一共删除数据:"+totalDeleted+"条,"+"一共耗时:"+(end - begin) / 1000 + "秒");
} catch (Exception e) {
e.printStackTrace();
System.out.println("删除失败");
}finally {
//关闭资源,倒关
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(con != null) con.close(); //必须要关
} catch (Exception e) {
}
}
}
}
版权声明:本文为weixin_45912556原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。