在数据库mysql中 设置的是timestamp格式来存储时间格式内容(格式是yyyy-MM-dd HH:mm:ss),在数据库中也可以直接查询并正确显示,但是在java程序中,我做的是一个JFrame中的一个JTable,然后遍历读取mysql数据并显示出来填充到cell中。
1、现在的问题是只显示年月日,并不显示时分秒(据说是java的一个什么自动的给截断了?)请问如何解决,需要改动rs那里么? 还是说设置时间格式的问题?
2、我还有一个导入Excel的方法,使用的是POI,在导入非时间类型时没有问题,可现在也遇到问题了,应该get**CellValue()呢,而且该字段是用什么格式呢?(转换几次?),我不太清楚这个该怎么设置了,也看了API试过几个数据类型,但好像都不是能直接正确解决问题的。
希望能帮我解决下,或者原来有类似问题发一个相对解释较好的链接(找了挺多的了,可好像都不太相同),谢谢:)
1、现在的问题是只显示年月日,并不显示时分秒(据说是java的一个什么自动的给截断了?)请问如何解决,需要改动rs那里么? 还是说设置时间格式的问题?
2、我还有一个导入Excel的方法,使用的是POI,在导入非时间类型时没有问题,可现在也遇到问题了,应该get**CellValue()呢,而且该字段是用什么格式呢?(转换几次?),我不太清楚这个该怎么设置了,也看了API试过几个数据类型,但好像都不是能直接正确解决问题的。
希望能帮我解决下,或者原来有类似问题发一个相对解释较好的链接(找了挺多的了,可好像都不太相同),谢谢:)
String s=dateformat.format(new Date()).toString();
试试 祝你好运
建议楼主把涉及到JTable部分的代码给贴出来看看,我想解决起来不难
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlstrCol);
rs.next();
RowNum = rs.getInt(1);
rs = stmt.executeQuery(sqlstr);
ResultSetMetaData rsmd = null;
rsmd = rs.getMetaData();
ColNum = rsmd.getColumnCount(); info = new Object[RowNum][];
i = 0;
while (rs.next()) {
info[i] = new Object[ColNum];
for (j = 1; j <= ColNum; j++) {
info[i][j - 1] = rs.getObject(j);
}
i++;
} clearTableModel(model);
for (Object[] r : info) {
model.addRow(r);这是写入JTable,读出来的时间直接显示就是0000-00-00,没有时分秒,忘记好像是在哪里看到说可以rs.***可以改?这是导入Excel,导入时也是被抛出格式类型错误的异常HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
String a1 = "";
int a2 = 0;
String a3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
int rowNum; rowNum = sheet.getLastRowNum();
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
cell = row.getCell(0);
a1 = cell.getStringCellValue();
try {
a1.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
cell = row.getCell(1);
a2 = (int) cell.getNumericCellValue();
cell = row.getCell(2);
//a3 = cell.getDateCellValue();
a3 = cell.getStringCellValue();
String sql = "insert into acc values('" + a1
+ "', '" + a2 + "', '" + a3 + "')";数据表acc格式就是name(a1),age(a2),time(a3)三个字段,time格式类型就是timestamp,试过a3为long估计也只是换汤没换药的方法,应该还是需要写哪里吧=。= 谢谢麻烦看一下了
用Timestamp试试2、我还有一个导入Excel的方法,使用的是POI,在导入非时间类型时没有问题,可现在也遇到问题了,应该get**CellValue()呢,而且该字段是用什么格式呢?(转换几次?),我不太清楚这个该怎么设置了,也看了API试过几个数据类型,但好像都不是能直接正确解决问题的。 HSSFCell cell = null; int type = cell.getCellType();
String val = ""; switch(type) {
case HSSFCell.CELL_TYPE_STRING:
val = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
Double d = cell.getNumericCellValue(); if(HSSFDateUtil.isValidExcelDate(d)) {
//format.
}
else {
val = String.valueOf(d);
}
}
打印出来看看
那用getTimestamp()方法就是 设置只填充固定的那列数据么?(刚刚学习java 刚刚接触JTable,如果哪问的太业余请见谅)
是不是就是说前几个内容也是类似,直接获得第一列string,第二列int,第三列Timestamp这个意思?
Ps:你涨的很快啊 裤衩都没了=。= 小高手哈~
你待会贴一下你控制台的时间打印出来的结果,我想应该是正常的
Object[][] info = new Object[10][]; int i = 0;
while (rs.next()) {
info[i] = new Object[colNum];
for (int j = 1; j <= colNum; j++) {
info[i][j - 1] = rs.getObject(j);
System.out.print("\t"+rs.getObject(j));
}
System.out.println();
i++;
}
1问题,确实如19楼所说,是JTable渲染问题,最后是自己实现渲染 就没问题了(另:直接toString也可以解决,就是把日期格式转为String在渲染到JTable中就可以正常显示了,但这个例子中由于表格内容是一起读到的,把其他内容格式都变为string显然不太合理(年龄一栏中的int还要按照数字来排序,虽然可以单独读取每一列,可……总之就是一步有问题,牵扯到的点就比较多了,只针对现在就是这样了))。
实现如下 tab1 = new JTable(model);
//建立好表模型后进行如下设置
DefaultTableCellRenderer render=new DefaultTableCellRenderer();
render.setHorizontalAlignment(JLabel.CENTER);
//设置为居中对齐,如果不进行设置,会有自动左对齐和右对齐的情况同时出现
tab1.setDefaultRenderer(java.lang.String.class,render );
tab1.setDefaultRenderer(java.lang.Integer.class,render );
tab1.setDefaultRenderer(java.lang.Float.class,render );
//影响时间显示的代码是下面一行,现在设置Timestamp的渲染器
//如果没有这一行,只有日期没有时间
tab1.setDefaultRenderer(java.sql.Timestamp.class,render );
2问题,还是导入的格式不对,对于一个timestamp类型的 就用cell.getDateCellValue()方法获得时间,然后Timestamp logonTime=new Timestamp(date.getTime()); 就可以正确导入0000-00-00 00:0:00格式的日期了~(还要注意编码格式问题哦(不过这个问题现在总结起来有点长))
至此总结完毕,希望以后对于,谢谢大家:)
Ps:这只是针对我这个初初学者的一点理解,如有不对欢迎讨论指正,谢谢