2016-12-09 20 views
1

新しい部屋を追加したい場合は、保存をクリックすると、Room Number, Room type, Bed number and Ratesをテキストフィールドに入力します。java.lang.NumberFormatException: For input string: ""java.lang.NumberFormatException:入力文字列の場合: ""データベースに保存中

エラーはat RoomMang.jButton1ActionPerformed(RoomMang.java:352)に由来します。これはfetchFromTextF();機能です。画像を参照してください。System.out.println (insertquery);を使用してRoomMgt

私のinsert文は次のようになります。 insert into roomdetail(room_no,room_type,room_rate,room_bed)values('','','','');

これは私がテキストフィールドからデータを取得する方法である:

public void fetchFromTextF(){ 
    rno=rnumber.getText(); 
    rtype=jTextField2.getText(); 
    rrate=Integer.parseInt(jTextField3.getText()); 
    rbed=jTextField4.getText(); 
} 

そして、これが私の保存アクションを行っボタンです。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     clearTextF(); 
     enableTextF(); 
     String query = "SELECT * FROM roomdetail where room_no like '" +   rnumber.getText() + "';"; 
     smt = con.createStatement(); 
     rs1 = smt.executeQuery(query); 
     if (!rs1.next()) { 
      try { 
       if (evt.getActionCommand().equals("Save")) { 
        fetchFromTextF(); 
        int code = JOptionPane.showConfirmDialog(this, "Information of Room No." +rno+ " will be added in database.", "Confirmation", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); 
        if (code == JOptionPane.YES_OPTION) { 
         String insertquery = "insert into roomdetail(room_no,room_type,room_rate,room_bed)values('" +rno + "','" + rtype + "'," + rrate + ",'" + rbed + "');"; 
         smt = con.createStatement(); 
         int success = smt.executeUpdate(insertquery); 
         if (success > 0) { 
          JOptionPane.showMessageDialog(this, "Record Saved"); 
          jButton1.setText("New"); 
         } else { 
          JOptionPane.showMessageDialog(this, "Problem in Saving. Retry"); 
         } 
        } else { 
        } 
       } else if (evt.getActionCommand().equals("New")) { 
        clearTextF(); 
        jButton1.setText("Save"); 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } else { 
      JOptionPane.showMessageDialog(this, "Room No. already used, Give another Room No."); 
     } 
    } catch (Exception ex) { 
    } 
}    
+1

があなたのスタックトレースを表示キャッチに変更に失敗します。私はそれが*あなたが持っているSQLインサートに起こると思います。 PreparedStatementを使用して、これらのエラーや可能性のあるSQLインジェクション攻撃を回避してください。https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html –

+0

ありがとう、私は質問を更新しました。 –

答えて

1

jTextField3の値はブランクです。下記oを

rrate=Integer.parseInt(jTextField3.getText()); 

は多分

rrate = -1; 
if (jTextField3.getText().trim().length() > 0) { 
    rrate=Integer.parseInt(jTextField3.getText()); 
} 

または単にそれが起こる場所を私たちが見ることができるように例外

try { 
    rrate=Integer.parseInt(jTextField3.getText().trim()); 
} 
catch (NumberFormatException ex) { 
    System.err.println (ex); 
    rrate = -1; 
} 
+0

ありがとう@scary、Lemmeはそれを見てみましょう –

+0

これはうまくいかず、データベースに '' -1''値しか保存されておらず、残りはdbで空白です。そのような値はデータベースに保存されておらず、すべて空の値になります –

+0

したがって、すべてのテキストフィールドは空です(fetchFromTextFで処理されます) –

関連する問題