如何在java中接受null JTextField?

如何在java中接受null JTextField?,java,mysql,swing,Java,Mysql,Swing,实际上,我正在为前端开发JavaSwing,并将Mysql作为系统的后端。 我有一个Java swing表单,其中包含一些JTextField,因此一些JTextField是必须填写的,一些是可选的。但当我没有在可选的JTextField中输入任何值时,它会显示NumberFormatException。 我已经在mysql数据库表中将这些可选字段设置为null,但它仍然不起作用 你能帮我做这个吗 多谢各位 String value1=(String)cb.getSelected

实际上,我正在为前端开发JavaSwing,并将Mysql作为系统的后端。 我有一个Java swing表单,其中包含一些JTextField,因此一些JTextField是必须填写的,一些是可选的。但当我没有在可选的JTextField中输入任何值时,它会显示NumberFormatException。 我已经在mysql数据库表中将这些可选字段设置为null,但它仍然不起作用

你能帮我做这个吗

多谢各位

        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;  
 }

 }