import java.sql.*; import java.util.UUID; public class create_account { public static void main(String[] args) { String dbPath = "/home/renjianbo/gerrit_install/review_site/db/ReviewDB"; String username = "renjianbo"; String email = "renjianbo@example.com"; String fullName = "renjianbo"; try { // 加载 H2 驱动 Class.forName("org.h2.Driver"); // 连接数据库 String url = "jdbc:h2:" + dbPath + ";AUTO_SERVER=TRUE"; Connection conn = DriverManager.getConnection(url, "sa", ""); // 检查账户是否存在 PreparedStatement checkStmt = conn.prepareStatement( "SELECT account_id FROM accounts WHERE account_id = 1000000" ); ResultSet rs = checkStmt.executeQuery(); int accountId = 1000000; if (!rs.next()) { // 创建新账户 PreparedStatement insertAccount = conn.prepareStatement( "INSERT INTO accounts (account_id, full_name, preferred_email, inactive, registered_on) " + "VALUES (?, ?, ?, ?, ?)" ); insertAccount.setInt(1, accountId); insertAccount.setString(2, fullName); insertAccount.setString(3, email); insertAccount.setInt(4, 0); insertAccount.setTimestamp(5, new Timestamp(System.currentTimeMillis())); insertAccount.executeUpdate(); System.out.println("账户创建成功: " + accountId); } else { // 更新现有账户 PreparedStatement updateAccount = conn.prepareStatement( "UPDATE accounts SET full_name = ?, preferred_email = ? WHERE account_id = ?" ); updateAccount.setString(1, fullName); updateAccount.setString(2, email); updateAccount.setInt(3, accountId); updateAccount.executeUpdate(); System.out.println("账户更新成功: " + accountId); } // 设置用户名 PreparedStatement checkExtId = conn.prepareStatement( "SELECT account_id FROM account_external_ids WHERE account_id = ? AND external_id = ?" ); checkExtId.setInt(1, accountId); checkExtId.setString(2, "username:" + username); rs = checkExtId.executeQuery(); if (!rs.next()) { PreparedStatement insertExtId = conn.prepareStatement( "INSERT INTO account_external_ids (account_id, email_address, password, external_id) " + "VALUES (?, ?, NULL, ?)" ); insertExtId.setInt(1, accountId); insertExtId.setString(2, email); insertExtId.setString(3, "username:" + username); insertExtId.executeUpdate(); System.out.println("用户名设置成功: " + username); } else { PreparedStatement updateExtId = conn.prepareStatement( "UPDATE account_external_ids SET email_address = ? WHERE account_id = ? AND external_id = ?" ); updateExtId.setString(1, email); updateExtId.setInt(2, accountId); updateExtId.setString(3, "username:" + username); updateExtId.executeUpdate(); System.out.println("用户名更新成功: " + username); } // 设置为管理员(如果是第一个账户) PreparedStatement checkAdmin = conn.prepareStatement( "SELECT account_id FROM account_group_members WHERE account_id = ? AND group_id = " + "(SELECT group_id FROM account_groups WHERE name = 'Administrators')" ); checkAdmin.setInt(1, accountId); rs = checkAdmin.executeQuery(); if (!rs.next()) { PreparedStatement addAdmin = conn.prepareStatement( "INSERT INTO account_group_members (account_id, group_id, added_on) " + "SELECT ?, group_id, ? FROM account_groups WHERE name = 'Administrators'" ); addAdmin.setInt(1, accountId); addAdmin.setTimestamp(2, new Timestamp(System.currentTimeMillis())); addAdmin.executeUpdate(); System.out.println("已设置为管理员"); } conn.close(); System.out.println("完成!账户 ID: " + accountId + ", 用户名: " + username); } catch (Exception e) { System.err.println("错误: " + e.getMessage()); e.printStackTrace(); } } }