在MySQL數據庫中,我有ta表,其中包含datetime列,其格式爲'2012-01-18 09:45:30'。我使用下面的語法查詢此表的內容:在JTable中顯示MySQL日期時間
Statement s = conn.createStatement();
s.executeQuery("select * from db_name.tbl_name;");
ResultSet rs = s.getResultSet();
ResultSetMetaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
//Put Column Header info in Vector
Vector columnNames = new Vector();
for (int column = 0; column < numberOfColumns; column++) {
columnNames.addElement(metaData.getColumnLabel(column+1));
}
//Put sql table data in Vector of Vectors
Vector data = new Vector();
while (rs.next()) {
Vector newRow = new Vector();
newRow.addElement(rs.getObject(i));
}
s.close();
rs.close();
DefaultTableModel model = new DefaultTableModel(data,columnNames);
JTable table = new JTable(model);
JScrollPane pane = new JScrollPane(table);
如果我不覆蓋的getColumnClass中的DefaultTableModel,那麼MySQL的日期時間列顯示在JTable作爲以下格式的字符串:
2012-01-18 09:45:30
如果我使用以下語法datetime列獲取類名稱,返回的類的java.sql.Timestamp
System.out.println(metaData.getColumnClassName(i));
現在,這爲t他混淆了我的一部分。如果我覆蓋的DefaultTableModel所述的getColumnClass方法返回正確的類,使用下面的語法,則日期時間列進行格式化和像這樣顯示:
Jan 18,2012
注意,時間部分被完全省略。
@override
public Class getColumnClass(int column) {
for (int row = 0; row < getRowCount(); row++) {
Object o = getValueAt(row, column);
if (o != null) {
try {
switch (metaData.getColumnClassName(column+1)) {
case "java.sql.Timestamp":
return java.sql.Timestamp.class;
case "java.sql.Date":
return java.sql.Date.class;
}
}
catch (SQLException ex) {
Logger.getLogger(ResultSetToCheckBoxTable.class.getName()).log(Level.SEVERE, null, ex);
}
}
return Object.class;
}
另外,如果我嘗試顯示java.sql.Date列,它顯示爲以下格式的字符串:
2012-01-18
不管我是否重寫getColumnClass返回正確的類。
如何將java.sql.Date
顯示爲:Jan 18, 2012
和java.sql.TimeStamp
以便顯示日期和時間?
感謝您的意見。但是,我重寫getColumnClass的部分原因是強制一列返回布爾值。我這樣做是爲了幫助我在我的JTable上添加一列複選框和一個select/delselect all按鈕。 – Riggster