2013-09-24 69 views
2

我正在爲我的項目使用NetBeans開發一個簡單的醫院管理系統,所以這裏是我的問題。當患者承認並且從醫院出院時,他/她的入院日期和出院日期應該被記錄下來。所以我把兩個jDateChooser用於入場和出場。所以當一個新患者承認我必須保持排出日期jDateChooser空白並保存。如何使用jdatechooser從MySQL數據庫保存和檢索空日期

  • 我改變了jDateChoosers的日期格式"yyyy-MM-dd"

  • (我用mysql控制中心0.9.4創建我的數據庫和表)首先,我試圖通過改變放電柱保存日期( dod)數據 鍵入'date',那麼異常跳轉如下。

    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'dod' at row

  • 然後我試圖改變數據類型「VARCHAR」,並允許空值 ,確定這一次在DB保存的空白沒有問題。

  • 當檢索患者的信息時,我已經將入院和出院日期編碼爲分別出現在兩個jDateChoosers中。但一個例外產生這樣

    java.text.ParseException:不可解析日期: 「」 在java.text.DateFormat.parse(DateFormat.java:357) 在Patient.pidKeyReleased(Patient.java:455) 在Patient.access $ 000(Patient.java:23) 在患者$ 1.keyReleased(Patient.java:118) 在java.awt.Component.processKeyEvent(Component.java:6466)

這是代碼和涉及日期問題的進口:

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date;` 

這在保存按鈕

try { 
     Statement stmt = connection.hosp().createStatement(); 
     String dt = ((JTextField)doa.getDateEditor().getUiComponent()).getText(); 
     String dt1 = ((JTextField)dod.getDateEditor().getUiComponent()).getText(); 

     stmt.executeUpdate("insert into patients values ('"+pid.getText()+"','"+nic.getText()+"','"+fname.getText()+"','"+lname.getText()+"','"+age.getText()+"','"+address.getText()+"','"+contact.getText()+"','"+ptype.getSelectedItem()+"','"+wardname.getText()+"','"+wardno.getText()+"','"+roomno.getText()+"','"+diagnosis.getText()+"','"+doctor.getText()+"','"+consultant.getText()+"','"+dt+"','"+dt1+"')"); 

} catch (Exception e) { 
       e.printStackTrace(); 
      } 

這是搜索代碼編碼,它是在文本框中編碼,並且操作keyrelease。 這是上述異常java.text.ParseException:Unparseable date:「」來的地方。

try { 
      Statement s = connection.hosp().createStatement(); 
      String ss = pid.getText().trim(); 

      ResultSet rs = s.executeQuery("select * from patients where patient_id like ('%"+ss+"%')"); 
      while(rs.next()){ 
      nic.setText(nics); 
      fname.setText(fnames); 
      lname.setText(lnames); 
      .... etc 
      String datevalue=rs.getString(16);   
      String datevalue1=rs.getString(17);    
      DateFormat formatter ; 
      Date date, date1; 
      formatter = new SimpleDateFormat("yyyy-MM-dd"); 
      date = (Date)formatter.parse(datevalue);  
      date1 = (Date)formatter.parse(datevalue1); 
      doa.setDate(date);  
      dod.setDate(date1); 
      } 

     }catch (Exception e) { 
      e.printStackTrace(); 
      } 

如果要解決這個問題請提任何其他方法。

+0

您需要提供更多的細節關於兩者的情況下,如相關代碼和異常,你是如何試圖插入值和你是如何試圖提取他們等等。 – Smit

+0

謝謝斯密特的快速反應,我已經添加了相關的代碼。 –

回答

1

你還沒有提供所有的信息,所以我假設。無論如何,這是我發現的。

  1. dtdt1列從您的insert聲明編號爲1516

    String datevalue = rs.getString(16); // Supposed to be 15 
    String datevalue1 = rs.getString(17); // Supposed to be 16 
    
  2. 儘管取得數據,從列使用rs.getXXX("Column Name")(提供了更多的可見性),而不是rs.getXXX("columnIndex")

  3. 也使用JDBC PreparedStatement。目前您的應用不能避免SQL Injection

  4. 請嘗試使用varchar代替date數據類型。使用Date這就是他們的設計。

相關問題