मैं डेटाबेस में डेटा डालने की तारीख डालने में सक्षम हूं, लेकिन जब मैंने डेटा लाने और इसे jDateChooser में दिखाने की कोशिश की, तो विषय के अनुसार त्रुटि दिखाई दी। क्यों?

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;

ये वे पैकेज हैं जिन्हें मैंने आयात किया है

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);
                               }
    }

डेटा को 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);
                           }
 
}  

ये वह कोड हैं जिनका उपयोग मैंने डेटा को टेक्स्ट फ़ील्ड में लाने के लिए किया था।

जब भी मैंने तालिका से एक पंक्ति पर क्लिक किया तो पकड़ अपवाद ने उपरोक्त त्रुटि दिखाई।

java.lang.ClassCastException: कक्षा java.sql.Date java.lang.String पर नहीं डाली जा सकती (java.sql.Date लोडर 'प्लेटफ़ॉर्म' के java.sql मॉड्यूल में है; java.lang.string लोडर 'boostrap' के java.base मॉड्यूल में है)

इस समस्या को हल कैसे करें?

1
Nash 26 जिंदा 2021, 13:41

1 उत्तर

सबसे बढ़िया उत्तर

त्रुटि से, यह स्पष्ट है कि निम्न कॉल java.sql.Date प्रकार की एक वस्तु लौटाती है जिसे String में नहीं डाला जा सकता है।

model.getValueAt(rowInd, 3)

बस, इसे इस प्रकार करें:

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

यदि आप इसे किसी विशिष्ट पैटर्न (String) में प्रारूपित करना चाहते हैं, तो आप ऐसा करने के लिए SimpleDateFormat का उपयोग कर सकते हैं उदा।

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

ध्यान दें कि java.util का दिनांक-समय API और उनका स्वरूपण API, SimpleDateFormat पुराना है और त्रुटि-प्रवण है। उनका पूरी तरह से उपयोग बंद करने और पर स्विच करने की अनुशंसा की जाती है आधुनिक दिनांक-समय API

आप Date#toInstant का इस्तेमाल कर सकते हैं java.util.Date से java.time.Instant पर स्विच करने के लिए जो आधुनिक दिनांक-समय API से एक प्रकार है।

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

ZoneId.systemDefault() को लागू समय क्षेत्र से बदलें उदा। ZoneId.of("Europe/London") आपकी आवश्यकता के अनुसार।

आधुनिक दिनांक-समय API के बारे में ट्रेल: दिनांक समय< से अधिक जानें /ए>.

2
Arvind Kumar Avinash 26 जिंदा 2021, 14:48