Files
gerrit/create_account.java

109 lines
4.8 KiB
Java
Raw Permalink Normal View History

2025-12-22 17:12:39 +08:00
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();
}
}
}