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