在java Jtable上显示postgresql日期
我面临着一个关于SQL日期和java的小问题,我已经在互联网上搜索过了。问题是,我的程序必须将SQL表中的所有日期加载到Java jtable中。我可能需要使用某种从日期到字符串的转换 我尝试使用如下转换在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(
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而不是对象?(真诚地询问,而不是批评,因为我不确定)@BasilBourquejava.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一起工作