我有一个框架,可以添加客户信息的新数据。我想在输入现有JTextField
时验证我的customerName
,一个消息对话框显示“客户名称已存在!”。
这是我将新数据添加到数据库表的代码。我在哪里放置JTextField
验证码?
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
cn.connection();
String sql = "insert into customer(customerName, customerPhone, customerAddress, contactPerson) values('" + customerName.getText() + "','" + customerPhoneTxtField.getText() + "', '"+ textCustomerAddress.getText() +"', '"+contactPersonTxtField.getText()+"')";
ps = cn.con.prepareStatement(sql);
ps.execute();
JOptionPane.showMessageDialog(null, "Customer Successfully Added");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Fill in the field(s) to complete.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
答案 0 :(得分:1)
在将数据插入数据库之前,您应该选择一个select语句来检查客户是否存在。
String sql = "SELECT * FROM customer WHERE customerName = '"+JTextfield.getText()+"'";
触发此查询,如果它返回行,那么如果存在客户名称,则该客户名称存在,您可以使用JOptionPane
弹出显示。
此代码应放在JButton.actionPerformed
。
答案 1 :(得分:1)
如果数据库中存在重复条目,则应捕获将引发的异常。
更改catch catch以捕获SQLException,然后使用getSQLState测试这是否是约束错误。当状态为'23'时会发生这种情况。例如
e.getSQLState().startsWith("23");
另一方面,值得思考如何构建代码。遵循MVC模式是将用户界面代码与业务逻辑和数据库代码分离的好方法。例如,尝试将Swing组件移动到与数据库代码不同的类中,这将允许您单独开发和测试每个组件,此外,如果您愿意,它还允许您在将来交换部分应用程序。即如果您决定使用NoSQL数据库而不是SQL DB。