如何在java中接受null JTextField?
实际上,我正在为前端开发JavaSwing,并将Mysql作为系统的后端。 我有一个Java swing表单,其中包含一些JTextField,因此一些JTextField是必须填写的,一些是可选的。但当我没有在可选的JTextField中输入任何值时,它会显示NumberFormatException。 我已经在mysql数据库表中将这些可选字段设置为null,但它仍然不起作用 你能帮我做这个吗 多谢各位如何在java中接受null JTextField?,java,mysql,swing,Java,Mysql,Swing,实际上,我正在为前端开发JavaSwing,并将Mysql作为系统的后端。 我有一个Java swing表单,其中包含一些JTextField,因此一些JTextField是必须填写的,一些是可选的。但当我没有在可选的JTextField中输入任何值时,它会显示NumberFormatException。 我已经在mysql数据库表中将这些可选字段设置为null,但它仍然不起作用 你能帮我做这个吗 多谢各位 String value1=(String)cb.getSelected
String value1=(String)cb.getSelectedItem();
String value2=t2.getText();
String value3=t3.getText();
String value4=t4.getText();
String value5=(String)cb5.getSelectedItem();
double value6=Double.parseDouble(t6.getText());
String value7=(String)cb7.getSelectedItem();
double value8=Double.parseDouble(t8.getText());
String value9=t9.getText();
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/Priyanka","root","root");
ps=con.prepareStatement("insert into ReceiptsVoucher values(?,?,?,?,?,?,?,?,?);");
ps.setString(1,value1);
ps.setString(2,value2);
ps.setString(3,value3);
ps.setString(4,value4);
ps.setString(5,value5);
ps.setDouble(6,value6);
ps.setString(7,value7);
ps.setDouble(8,value8);
ps.setString(9,value9);
int r=ps.executeUpdate();
if(r==0)
JOptionPane.showMessageDialog(null,"Record not Inserted retry"," ",JOptionPane.ERROR_MESSAGE);
else
JOptionPane.showMessageDialog(null,"Record Inserted Sucessfully"," ",JOptionPane.INFORMATION_MESSAGE);
ps.close();
con.close();
JComboxBox ie cb7和JTextField t8是可选字段
String value1=(String)cb.getSelectedItem();
String value2=t2.getText();
String value3=t3.getText();
String value4=t4.getText();
String value5=(String)cb5.getSelectedItem();
double value6=Double.parseDouble(t6.getText());
String value7=(String)cb7.getSelectedItem();
String v8=t8.getText();
//double value8=Double.parseDouble(t8.getText());
String value9=t9.getText();
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/Priyanka","root","root");
ps=con.prepareStatement("insert into ReceiptsVoucher values(?,?,?,?,?,?,?,?,?);");
ps.setString(1,value1);
ps.setString(2,value2);
ps.setString(3,value3);
ps.setString(4,value4);
ps.setString(5,value5);
ps.setDouble(6,value6);
ps.setString(7,value7);
if(v8 != null && !v8.isEmpty())
{
double value8=Double.parseDouble(v8);
ps.setDouble(8, value8);
}
else
{
ps.setNull(8, Types.DOUBLE);
}
//ps.setDouble(8,value8);
ps.setString(9,value9);
int r=ps.executeUpdate();
if(r==0)
JOptionPane.showMessageDialog(null,"Record not Inserted retry"," ",JOptionPane.ERROR_MESSAGE);
else
JOptionPane.showMessageDialog(null,"Record Inserted Sucessfully"," ",JOptionPane.INFORMATION_MESSAGE);
ps.close();
con.close();
问题解决了。现在可以了。谢谢大家您正在将textfield值转换为一些数字,如
Double.parseDouble(t8.getText());
这将抛出NumberFormatException
在您的案例中,您应该检查textfield t8的空值可能性,以及是否应该设置
java中数据库中的db NULL值。像这样做
try {
value8 = Double.parseDouble(t8.getText());
} catch (NumberFormatException) {
value8 = 0.0;
}
String query = "INSERT INTO your_table(val) VALUES (?)";
PreparedStatement st = con.prepareStatement(query);
if ( value8 != null && !value8.isEmpty()) {
st.setDouble(1, value8);
} else {
st.setNull(1, Types.DOUBLE);
}
您可以为空条目使用默认值。然后将其发送到数据库 比如: 当您使用它时,请再次检查它。这是您的问题
double value8=Double.parseDouble(t8.getText());
解析前检查空字符串或空字符串
double value8=Double.parseDouble(t8.getText());
当您在JtextFielad t8中输入nothing时,您的代码试图将null值转换为double,这会导致NumberFormat异常
使用以下代码片段可能会解决您的问题
String value8=t8.getText();
及
将值8视为字符串
您可以使用一种方法进行类型检查
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
}
从要检查的地方调用上面的方法,我认为您正在解析null。这就是为什么你会有数字形式的感觉。如果您从mysql端获得空值。比较它并将其作为空字符串。那你就不会有例外了 考虑提供一个能证明你的问题的例子。这将减少混淆并获得更好的响应您可以提供示例代码吗?您确定您没有尝试将JTextField内容解析为数字吗?Omar我正在解析JTextField内容以双重检查下面的答案谢谢您的回复,但值应该是数字,所以我想它不会起作用。或者我没有在此处看到代码在…之前,你能告诉我什么是Types.DOUBLE吗?请看:if value8!=空&!value8.isEmpty获取此行的错误是运算符!=对于参数类型double未定义,null-无法对基元类型调用isEmptydouble@PriyankaPawar-使用包装器类。替换双到双Double@PriyankaPawar-replace double value8=double.parseDoublet8.getText;Double value8=Double.parseDoublet8.getText;在这种情况下,您正在跳过类型检查转换为double。是的,您是对的,我的代码正在尝试将null值转换为double,但在同一个实例中,我如何将value8作为字符串和double。在这种情况下,您正在跳过类型检查转换为double。是的,您必须进一步执行此操作。我在这里告诉过你如何避免NuberFormatException。进一步的事情,问题谁已经张贴可以很容易地做到,不是吗?是的,我明白了。多谢各位
ps.setString(8,value8);
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
}