MySQL查询从MySQL DB检索JTable中的数据的MySQL代码失败,但在SQL Workbench中工作正常

以下查询:

选择date_format(emp_date,'%d-%b-%Y')作为emp_date,emp_name,emp_accno,emp_amt,pay_mode,e_comp,e_remark FROM emppayment”;

检索时,我需要使用“ dd-mmm-yyyy”(04-Apr-2020)格式,因此我正在使用上述date_format根据要求进行转换。
在JTable中执行时,出现以下错误。

错误:java.sql.SQLException:列1中DATE '20 -Mar-2020'的格式错误

           String dquery = "SELECT date_format(emp_date,'%d-%b-%Y') as emp_date, emp_name,emp_accno,emp_ifsc,sal_month,emp_amt,pay_mode,e_comp,e_remark FROM emppayment;

            pst = con.prepareStatement(dquery);
            rs = pst.executeQuery();
            DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
            tm.setRowCount(0);

         while (rs.next()) {
             Object obj[]= {
            rs.getString("emp_date"),
            rs.getString("emp_name"),
            rs.getString("emp_accno"),
            rs.getString("emp_ifsc"),
            rs.getString("sal_month"),
            rs.getString("emp_amt"),
            rs.getString(pay_mode),
            rs.getString(e_comp),
            rs.getString(e_remark)};

            tm2.addRow(obj);
 }


请指导我

最佳答案

数据类型不匹配
至于您的错误,我想知道在代码提供String对象时,支持JTable的数据模型中的列类型是否指定了日期时间数据类型。因此,数据类型不匹配。
使用Java,而不是SQL
我会在您的Java应用程序中而不是在SQL中进行这种格式化。
LocalDate
使用与JDBC 4.2或更高版本兼容的JDBC驱动程序从DATE列中将值作为LocalDate检索。这样的驱动程序能够直接与数据库交换java.time对象。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

DateTimeFormatter本地化
自动本地化以呈现给用户。
Locale locale = Locale.CANADA_FRENCH ;  // Or Locale.US and so on.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( locale ) ;
String output = ld.format( f ) ;

硬编码格式
如果您坚持对特定格式进行硬编码,请指定格式模式。
DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.UK ) ;

10-07 19:32
查看更多