2014-11-05 45 views
0

其实我正在研究Java Swing的前端和Mysql作为我系统的后端。 我有一个Java swing表单,它包含一些JTextField,因此需要一些JTextField来填充必需的,一些是可选的。但是当我没有在可选的JTextField中输入任何值时,它显示NumberFormatException。 我已经将mysql数据库表中的null设置为那些可选字段,但仍然无效。如何接受Java中的空JTextField?

你能帮我解决吗?

谢谢

 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即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(); 

问题解决了。这工作现在很好。谢谢大家

+1

考虑提供一个[runnable示例](https://stackoverflow.com/help/mcve),它演示了您的问题。这会减少混淆和更好的反应 – MadProgrammer 2014-11-05 06:15:34

+0

您能否提供示例代码? – DeepInJava 2014-11-05 06:19:09

+0

你确定你没有试图解析JTextField的内容吗? – 2014-11-05 06:29:10

回答

0

你的文本字段值转换为一些数字,如

Double.parseDouble(t8.getText()); 

这将引发NumberFormatException的

你应该检查textfield t8的空值的可能性,如果你应该在数据库中设置 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); 
} 
+0

你能告诉我什么是Types.DOUBLE吗? – 2014-11-05 06:39:43

+0

请参阅:http://docs.oracle.com/javase/7/docs/api/java/sql/Types.html – DeepInJava 2014-11-05 06:43:17

+0

if(value8!= null &&!value8.isEmpty())在此行上获取错误运算符!=未定义为参数类型 \t double,null \t - 无法在基本类型double上调用isEmpty()double – 2014-11-05 06:48:36

1

您可以使用空条目的默认值。然后将其发送到数据库。

像:

if(st == null) 
    st = ""; 

当你使用它再次检查相同。

+0

谢谢你的回复,但价值应该是数字,所以我想它不会工作 – 2014-11-05 06:34:16

+0

对不起,我以前没有看到这里的代码... – sadlil 2014-11-05 06:44:55

0

这里是你的问题

double value8=Double.parseDouble(t8.getText()); 

检查是否为空或空字符串解析

+0

是的,我知道了。非常感谢你 – 2014-11-05 07:42:46

0
double value8=Double.parseDouble(t8.getText()); 

当您进入没什么JtextFielad t8正前,你的代码试图null值转换为加倍,导致NumberFormat Exception

使用以下代码片段可能会解决您的问题

String value8=t8.getText(); 

而且

ps.setString(8,value8); 

对待value8为String

可以使用的方法进行类型检查

public static boolean isNumeric(String str) 
{ 
try 
    { 
    double d = Double.parseDouble(str); 
    } 
    catch(NumberFormatException nfe) 
    { 
    return false; 
    } 
    return true; 
} 

} 

呼叫从那里你要检查

上述方法
+0

你在这种情况下跳过类型检查(转换为double)。 – DeepInJava 2014-11-05 06:48:57

+0

是你是对的我的代码试图将空值转换为双倍,但在同样的情况下,我怎么可以采取value8作为字符串和双重 – 2014-11-05 07:04:30

-1

我想,您正在解析null。这就是为什么你要获得NumberFormatException。如果你从mysql端得到空值。比较它把它作为一个空字符串""。那么你不会得到例外。

+0

你在这种情况下跳过类型检查(转换为双)。 – DeepInJava 2014-11-05 06:57:57

+0

是啊,你必须做的更进一步。我在这里告诉过如何避免NuberFormatException。更重要的是,发布的问题可以轻松完成,不是吗? – 2014-11-05 07:02:51