Java 验证数据库中的函数
我不知道如何验证这一点,如果找不到id值,我可以说id值不存在。我有一个带有数据库的GUI功能,在其中输入某人的id(属性),它会返回他们的其他信息(姓名等),但当找不到id时,我的程序会崩溃,我不太确定如何确保在找不到id时,我可以使用JOption窗格Java 验证数据库中的函数,java,database,list,Java,Database,List,我不知道如何验证这一点,如果找不到id值,我可以说id值不存在。我有一个带有数据库的GUI功能,在其中输入某人的id(属性),它会返回他们的其他信息(姓名等),但当找不到id时,我的程序会崩溃,我不太确定如何确保在找不到id时,我可以使用JOption窗格 int id = Integer.parseInt(jTextField15.getText()); Person updatePerson = new Person(); for (Person person : p
int id = Integer.parseInt(jTextField15.getText());
Person updatePerson = new Person();
for (Person person : personList)
{
if (person.getPersonid() == id)
{
updatePerson = person;
}
}
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
程序似乎正常工作,但在找不到id后,线程消息中出现异常:
线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中的异常:非法值
如果您能帮助解释这是什么、如何修复以及能够向用户打印消息,我们将不胜感激。我想您的意思是: 当我查找一个元素而没有找到它时,我应该在GUI中做什么 您可以采取两种方法: 1:去掉元素。这对html和其他生成的用户界面很有效(通常)。循环之后,检查updatePerson==null,如果是,则跳过生成html元素(或文本字段等) 2:对于GUI,通常使用默认值。这可以通过以下两种方式之一完成:为每个字段使用默认值,或者创建虚拟对象
int id = Integer.parseInt(jTextField15.getText());
Person updatePerson = null;
for (Person person : personList)
{
if (person.getPersonid() == id)
{
updatePerson = person;
break; // with break: get first found, without break: get last found.
// this depends on whether it is possible to have a person show up more than once.
}
}
if (person == null) {
jTextField11.setText("");
jTextField11.setVisible(false); // setting fields to empty, in case logic
jTextField17.setText(""); // is using them or if someone
jTextField17.setVisible(false); // sets visible true before setting text
jTextField12.setText(""); // as you don't want to output wrong data
jTextField12.setVisible(false); // even for a flicker of a second
jTextField16.setText("");
jTextField16.setVisible(false);
jSpinner5.setValue(SOME_GLOBAL_DEFAULT_DATE); // ie. 0 or 1970-01-01
jSpinner5.setVisible(false);
} else {
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
}
或者您可以这样做(保留字段,但为空)
在写这篇文章时,我意识到我最终会采用与第一种方法相关的第三种方法:
if (updatePerson == null) {
panelContainingFields.setVisible(false);
} else {
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
panelContainingFields.setVisible(true);
}
只需将您使用的所有字段放在面板中,并在没有元素时隐藏面板。到底是什么问题?在循环之后测试updatePerson是否为null如何?当发现此人时,您可能还想
中断
。使用break似乎可以工作,但之后我的程序崩溃了,非常感谢。这是我必须为我的项目做的最后一部分,即使它工作正常,它仍然会在底部给我一条错误消息,以及我如何使用JOptionPane声明id号不存在。我强烈要求您在提交之前理解您编写的全部代码。在每个块上添加注释行,说明每个部分的功能。这将帮助您跟踪代码。我不认为optionpane本身能做到这一点。但是你可以根据你是否找到一个人来选择显示哪个选项窗格。我只是有点困惑。我现在正在评论我的程序。谢谢你的帮助
if (updatePerson == null) {
panelContainingFields.setVisible(false);
} else {
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
panelContainingFields.setVisible(true);
}