在java Jtable上显示postgresql日期

在java Jtable上显示postgresql日期,java,swing,postgresql,Java,Swing,Postgresql,我面临着一个关于SQL日期和java的小问题,我已经在互联网上搜索过了。问题是,我的程序必须将SQL表中的所有日期加载到Java jtable中。我可能需要使用某种从日期到字符串的转换 我尝试使用如下转换records[0]=rs.getDate(“mydate”).toString()但这方面运气不好 private void load(String value){ Conector cc= new Conector(); Connection cn= cc.conexion(

我面临着一个关于SQL日期和java的小问题,我已经在互联网上搜索过了。问题是,我的程序必须将SQL表中的所有日期加载到Java jtable中。我可能需要使用某种从日期到字符串的转换

我尝试使用如下转换
records[0]=rs.getDate(“mydate”).toString()但这方面运气不好

private void load(String value){
    Conector cc= new Conector();
    Connection cn= cc.conexion();
    //java.util.Date date= new java.util.Date();
    //SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");                
    String [] titles={"Dates"};
    String [] records;
    records = new String[1];
    String sql="SELECT * FROM turns WHERE dates LIKE '%"+value+"%'";
    model= new DefaultTableModel(null,titles);       
    try {
        Statement st= cn.createStatement();
        ResultSet rs= st.executeQuery(sql);            
        while (rs.next()) {                
            records[0]=rs.getDate("mydate").toString();
            model.addRow(records);
        }
        tablaturnos.setModel(model);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Error:"+e, "Error Message", JOptionPane.ERROR_MESSAGE);
    }
}

感谢您的帮助。

只需将所有日期收集为
Date
对象即可

private void load(String value) {
    Conector cc = new Conector();
    Connection cn = cc.conexion();

    String[] titles = {"Dates"};
    model = new DefaultTableModel(null, titles);
    String sql = "SELECT * FROM turns WHERE dates LIKE ?";

    try (PreparedStatement st = cn.prepareStatement(sql)) {
        st.setString(1, "%" + value + "%");
        try (ResultSet rs = st.executeQuery(sql)) {

            Object[] records = new Object[1];
            while (rs.next()) {
                records[0] = rs.getDate("mydate");
                model.addRow(records);
            }
            tablaturnos.setModel(model);
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Error:" + e, "Error Message", JOptionPane.ERROR_MESSAGE);
    }
}
然后使用自定义的
TableCellRenderer
更改格式以满足您的需要,例如

public class DateTableCellRenderer extends DefaultTableCellRenderer {
    public static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        if (value instanceof java.util.Date) {
            value = DATE_FORMAT.format(date);
        }
        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    }

}
然后,您可以设置该表,使其在遇到
日期时使用渲染器

tablaturnos.setDefaultRenderer(java.util.Date.class, new DateTableCellRenderer());
tablaturnos.setDefaultRenderer(java.sql.Date.class, new DateTableCellRenderer());
请查看,并获取更多详细信息


您可能还需要查看和

而不是更改数据以满足您的需求,创建一个自定义TableCellRenderer,它可以格式化数据。正如您所说,我将收集所有日期作为
Date
。但是,这可以应用于多于
Date
字段的SQL表,如
Varchar
,或者此方法仅限于
Date
?是的,事实上,您应该按原样(或尽可能接近原始数据)对数据建模,然后使用诸如renders格式化程序之类的东西来显示it@MadProgrammer假设他的数据库类型是SQL,这不应该是java.sql.Date的
值实例(“.sql”)而不是java.util.Date的
值实例吗?为什么不在整个代码中指定java.sql.Date而不是对象?(真诚地询问,而不是批评,因为我不确定)@BasilBourque
java.sql.Date
扩展了
java.util.Date
,因此
java.sql.Date
可以充当
java.util.Date
。使用
对象
的主要原因是它符合API的要求,并且正如OP所述,
日期
不是他们想要的唯一数据类型add@BasilBourque可能吧,但我很懒,这意味着我不需要另一个渲染器来独立处理
java.sql.Date
。一些JDBC驱动程序还与
java.util.Date
(和
sql.Date
)一起工作,因此还有另一个交叉点:P也许他们会更新JDBC API以与Java8中新的日期/时间API一起工作