1

I am able to insert the date the insert the data into the database, but when I tried to fetch the data out and show it in the jDateChooser, it showed up the error as the topic stated. why?

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.*;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.proteanit.sql.DbUtils;
import java.util.Date;

these are the packages I imported in

private void DisplayTable(){
        try {
             Class.forName("com.mysql.jdbc.Driver");
               Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3308/java_his_db","root","");
               String sql = "select * from reservation";
               PreparedStatement ps = con.prepareStatement(sql);
               ResultSet res = ps.executeQuery();
               jTable_reservation.setModel(DbUtils.resultSetToTableModel(res));
               
        }catch (Exception e) {
                                   JOptionPane.showMessageDialog(null, e);
                               }
    }

this is my private void to show the data into jTable

private void jTable_reservationMouseClicked(java.awt.event.MouseEvent evt) {                                                
    // TODO add your handling code here:
    DefaultTableModel model = (DefaultTableModel)jTable_reservation.getModel();

    int rowInd = jTable_reservation.getSelectedRow();

    roomID.setText(model.getValueAt(rowInd, 0).toString());
    customerID.setText(model.getValueAt(rowInd, 1).toString());

    try {
        Date selectin = new SimpleDateFormat("yyyy-MM-dd").parse((String)model.getValueAt(rowInd, 3));
        jDateChooser_in.setDate(selectin);
    } catch (Exception e) {
                               JOptionPane.showMessageDialog(null, e);
                           }
 
}  

these are the code I used to fetch the data into text fields.

the catch exception then showed the error above whenever I clicked one row from the table.

java.lang.ClassCastException: class java.sql.Date cannot be cast to java.lang.String (java.sql.Date is in module java.sql of loader 'platform'; java.lang.string is in module java.base of loader 'boostrap')

how to solve this problem?

1 Answer 1

2

From the error, it is clear that the following call returns an object of type java.sql.Date which can not cast into a String.

model.getValueAt(rowInd, 3)

Simply, do it as follows:

java.util.Date selectin = model.getValueAt(rowInd, 3);

If you want to format it into some specific pattern (String), you can use SimpleDateFormat to do so e.g.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = sdf.format(selectin);

Note that the date-time API of java.util and their formatting API, SimpleDateFormat are outdated and error-prone. It is recommended to stop using them completely and switch to the modern date-time API.

You can use Date#toInstant to switch from the java.util.Date to java.time.Instant which is a type from the modern date-time API.

Instant instant = selectin.toInstant();
LocalDate dateSelectin = instant.atZone(ZoneId.systemDefault()).toLocalDate();
String strDateSelectin = dateSelectin.toString();

Replace ZoneId.systemDefault() with the applicable timezone e.g. ZoneId.of("Europe/London") as per your requirement.

Learn more about the modern date-time API from Trail: Date Time.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.