从MySQL数据库中检索JTable中数据的MySQL查询在Java代码中失败,但在SQL Workbench中运行良好
以下查询:
将日期格式(emp_date,'%d-%b-%Y'(选择为emp_date、emp_name、emp_accno、emp_amt、pay_mode、e_comp、e_remark FROM emppayment";
在检索时,我需要"dd-mmm-yyyy"(2020年4月4日(格式,所以我使用上面的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 ) ;