admin

检查Java数据库中是否存在值(Accountnumber)

sql

我在名为save的类中具有以下方法,正在使用JDBC数据库保存和查看Java应用程序上的数据。

我的数据库 ZaiLab中 有SAVINGS表,其中包含以下字段,

ID,ACCOUNTNUMBER,CUSTOMERNAME,BALANCE,MINMUM)

用户将使用JOPtionPane输入以下值。

(id,accountNumber,customername,balance,minmum);

然后,应用程序应检查用户输入的 accountNumber
是否已经存在;如果不存在,则应将记录保存到表SAVINGS中;如果是,则应显示相应的消息。“帐户已经存在”。

public void openSavingsAccount(int Id, int Amount) {

    try {
        String host = "jdbc:derby://localhost:1527/ZaiLab";
        String uname = "siduduzo";
        String upass = "Password01";
        Connection con = DriverManager.getConnection(host, uname, upass);

        Statement stmt = con.createStatement();

        String SQL = "SELECT * FROM SAVINGS";
        ResultSet rs = stmt.executeQuery(SQL);

        int minmum = 1000;
        balance = minmum;

        while (rs.next()) {
            int acc_col = rs.getInt("ACCOUNTNUMBER");
            if (acc_col == accountNumber) {
                JOptionPane.showMessageDialog(null, "Sorry, account " + accountNumber
                        + " aready Exist");
            } else if (Amount < minmum) {
                JOptionPane.showMessageDialog(null, "Can not Open the Account, Minimum amount to deposit must be R1000");
            } else {

                balance = balance + Amount;
                id = Id;
                stmt.executeUpdate("INSERT INTO `SAVINGS`(ID,ACCOUNTNUMBER,CUSTOMERNAME,BALANCE,MINMUM)VALUE ('" + id + "','" + accountNumber + "','" + customername + "'," + balance + ",'" + minmum + "')");

            }

        }

    } catch (SQLException err) {
        System.out.println(err.getMessage());
    }

}

阅读 361

收藏
2021-07-01

共1个答案

admin

现在,您要从中选择所有行,SAVINGS并尝试为每个没有“新”帐号的行插入一个新帐户。

相反,您应该只选择具有新帐号的行,并在不存在该行的情况下插入。

您还应该使用准备好的语句来防止SQL注入。

例如:

try (PreparedStatement checkAccountExists = con.prepareStatement(
        "SELECT 1 FROM SAVINGS WHERE ACCOUNTNUMBER = ?")) {
    checkAccountExists.setInt(1, accountNumber);

    try (ResultSet rs = checkAccountExists.executeQuery()) {
        if (rs.next()) {
            // handle account already exists
        } else {
            try (PreparedStatement insert = con.prepareStatement(
                    "INSERT INTO SAVINGS(ID, ACCOUNTNUMBER, CUSTOMERNAME, BALANCE, MINMUM) VALUES (?, ?, ?, ? , ?)")) {
                insert.setInt(1, id);
                insert.setInt(2, accountNumber);
                insert.setString(3, customername);
                insert.setInt(4, balance);
                insert.setInt(5, minmum);

                insert.executeUpdate();
            }
        }
    }
}

另外,您可以ACCOUNTNUMBER在数据库中定义一个唯一约束,然后执行插入操作,并在记录已存在的情况下处理约束违例。

2021-07-01