import java.sql.*; import java.nio.file.*; public class V08AllTenants { static final String HOST = "jdbc:mysql://cq-cdb-8fjmemkb.sql.tencentcdb.com:27220/?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true"; static final String USER = "root"; static final String PASS = "Ylrz_1q2w3e4r5t6y"; public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); String sql = Files.readString(Paths.get("d:\\ylrz_saas_new\\java\\fs-agent\\src\\main\\resources\\db\\migration\\tenant\\V20260618_08__lobster_menu_complete_sync.sql")); try (Connection conn = DriverManager.getConnection(HOST, USER, PASS); Statement s = conn.createStatement()) { // 找所有租户库 java.util.List dbs = new java.util.ArrayList<>(); ResultSet rs = s.executeQuery("SHOW DATABASES LIKE 'fs_tenant_%'"); while (rs.next()) dbs.add(rs.getString(1)); System.out.println("=== Found " + dbs.size() + " tenant DBs ===\n"); for (String db : dbs) { String url = "jdbc:mysql://cq-cdb-8fjmemkb.sql.tencentcdb.com:27220/" + db + "?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true"; try (Connection tc = DriverManager.getConnection(url, USER, PASS); Statement ts = tc.createStatement()) { // 执行前计数 int beforeSys = cnt(ts, "sys_menu"); int beforeComp = cnt(ts, "company_menu"); ts.execute(sql); int afterSys = cnt(ts, "sys_menu"); int afterComp = cnt(ts, "company_menu"); System.out.printf("%-32s sys_menu: %2d -> %2d company_menu: %2d -> %2d\n", db, beforeSys, afterSys, beforeComp, afterComp); } catch (Exception e) { System.out.printf("%-32s ERROR: %s\n", db, e.getMessage().split("\\n")[0]); } } System.out.println("\n=== DONE ==="); } } static int cnt(Statement s, String t) throws SQLException { ResultSet r = s.executeQuery("SELECT COUNT(1) FROM " + t + " WHERE menu_id BETWEEN 29900 AND 29999"); r.next(); return r.getInt(1); } }