我在名为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()); } }
现在,您要从中选择所有行,SAVINGS并尝试为每个没有“新”帐号的行插入一个新帐户。
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在数据库中定义一个唯一约束,然后执行插入操作,并在记录已存在的情况下处理约束违例。
ACCOUNTNUMBER