2013-09-24 30 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这就是他们的设计。

相关问题