20260821230656
This commit is contained in:
1 parent
2e5d532f23
commit
c43b4c8364
144 files changed
+7665
-242
No files matched your search
@@ -0,0 +1,71 @@
|
||||
import java.io.FileInputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class UserMigrate {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Properties props = new Properties();
|
||||
try (FileInputStream in = new FileInputStream(args[0])) { props.load(in); }
|
||||
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
|
||||
try (Connection conn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password"))) {
|
||||
|
||||
// 1. backup b_user data to file (INSERT statements)
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery("SELECT * FROM b_user");
|
||||
PrintWriter w = new PrintWriter("backup_b_user.sql", StandardCharsets.UTF_8)) {
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
int cols = meta.getColumnCount();
|
||||
w.println("-- b_user backup: " + new Timestamp(System.currentTimeMillis()));
|
||||
while (rs.next()) {
|
||||
StringBuilder colsSql = new StringBuilder();
|
||||
StringBuilder vals = new StringBuilder();
|
||||
for (int i = 1; i <= cols; i++) {
|
||||
if (i > 1) { colsSql.append(", "); vals.append(", "); }
|
||||
colsSql.append("[").append(meta.getColumnName(i)).append("]");
|
||||
Object v = rs.getObject(i);
|
||||
if (v == null) vals.append("NULL");
|
||||
else if (v instanceof Number || v instanceof Boolean) vals.append(v);
|
||||
else vals.append("N'").append(String.valueOf(v).replace("'", "''")).append("'");
|
||||
}
|
||||
w.println("INSERT INTO [dbo].[b_user] (" + colsSql + ") VALUES (" + vals + ");");
|
||||
}
|
||||
System.out.println("Backup written: backup_b_user.sql (" + cols + " cols)");
|
||||
}
|
||||
|
||||
// 2. migrate: PK drop -> add identity col -> drop old -> rename -> rebuild PK
|
||||
conn.setAutoCommit(false);
|
||||
String[] stmts = {
|
||||
"ALTER TABLE [dbo].[b_user] DROP CONSTRAINT [PK_b_user]",
|
||||
"ALTER TABLE [dbo].[b_user] ADD [b_id_new] bigint identity(1,1) NOT NULL",
|
||||
"ALTER TABLE [dbo].[b_user] DROP COLUMN [b_id]",
|
||||
"EXEC sp_rename 'dbo.b_user.b_id_new', 'b_id', 'COLUMN'",
|
||||
"ALTER TABLE [dbo].[b_user] ADD CONSTRAINT [PK_b_user] PRIMARY KEY ([b_id])"
|
||||
};
|
||||
for (String s : stmts) {
|
||||
try (Statement st = conn.createStatement()) { st.execute(s); System.out.println("OK: " + s); }
|
||||
catch (SQLException e) { conn.rollback(); System.err.println("FAILED: " + e.getMessage() + "\n SQL: " + s); return; }
|
||||
}
|
||||
conn.commit();
|
||||
System.out.println("COMMITTED.");
|
||||
|
||||
// 3. verify
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery("SELECT b_id, b_account, b_name FROM b_user ORDER BY b_id")) {
|
||||
System.out.println("== b_user after migration ==");
|
||||
while (rs.next()) System.out.printf(" b_id=%s b_account=%s b_name=%s%n",
|
||||
rs.getString("b_id"), rs.getString("b_account"), rs.getString("b_name"));
|
||||
}
|
||||
try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(
|
||||
"SELECT is_identity FROM sys.columns WHERE object_id=OBJECT_ID('b_user') AND name='b_id'")) {
|
||||
rs.next(); System.out.println("b_user.b_id is_identity=" + rs.getBoolean("is_identity"));
|
||||
}
|
||||
try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(
|
||||
"SELECT name FROM sys.key_constraints WHERE parent_object_id=OBJECT_ID('b_user') ORDER BY name")) {
|
||||
System.out.println("== b_user constraints ==");
|
||||
while (rs.next()) System.out.println(" " + rs.getString("name"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user