在数据库mysql中 设置的是timestamp格式来存储时间格式内容(格式是yyyy-MM-dd HH:mm:ss),在数据库中也可以直接查询并正确显示,但是在java程序中,我做的是一个JFrame中的一个JTable,然后遍历读取mysql数据并显示出来填充到cell中。
1、现在的问题是只显示年月日,并不显示时分秒(据说是java的一个什么自动的给截断了?)请问如何解决,需要改动rs那里么? 还是说设置时间格式的问题?
2、我还有一个导入Excel的方法,使用的是POI,在导入非时间类型时没有问题,可现在也遇到问题了,应该get**CellValue()呢,而且该字段是用什么格式呢?(转换几次?),我不太清楚这个该怎么设置了,也看了API试过几个数据类型,但好像都不是能直接正确解决问题的。
        希望能帮我解决下,或者原来有类似问题发一个相对解释较好的链接(找了挺多的了,可好像都不太相同),谢谢:)

解决方案 »

  1.   

    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd/HH:mm:ss");
    String s=dateformat.format(new Date()).toString();
    试试 祝你好运
      

  2.   

    是不是显示的格式有问题?从数据库取出来是timestamp  用simpleDateFormate格式化成你想要的格式
      

  3.   

    我用Timestamp格式放到JTable里面,能正常显示时分秒,不知道你在读MySQL数据的时候,是不是用了java.sql.Date这个日期类?
    建议楼主把涉及到JTable部分的代码给贴出来看看,我想解决起来不难
      

  4.   

    综上所述……上代码吧……conn = JDBCConnection.getConnection();
    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估计也只是换汤没换药的方法,应该还是需要写哪里吧=。=  谢谢麻烦看一下了
      

  5.   

    1、现在的问题是只显示年月日,并不显示时分秒(据说是java的一个什么自动的给截断了?)请问如何解决,需要改动rs那里么? 还是说设置时间格式的问题?
    用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);
    }
    }
      

  6.   

    rs.getObject(j)
    打印出来看看
      

  7.   

    lz用Timestamp getTimestamp(int columnIndex) 试试。
      

  8.   

    如果表的结构比较稳定的话,楼主还是不要用ResultSetMetaData这样元数据进行处理了,直接调用ResultSet.getTimestamp("time");获得时间就行了
      

  9.   

    大家去看看这个问题啊 谢谢了http://topic.csdn.net/u/20110823/21/93d88c37-12f3-43e4-9b39-0b8e8eebd36b.html?seed=1262700713&r=75121468#r_75121468
      

  10.   

    http://topic.csdn.net/u/20110823/21/93d88c37-12f3-43e4-9b39-0b8e8eebd36b.html?seed=1262700713&r=75121468#r_75121468
      

  11.   

    确实表结构是基本稳定的,(我这个方法是不是更普遍用于表头跟内容都会有可能变得那种,然后动态活动表头跟内容;确实开始表头也是这样读取出来的,后来才改为默认的表头内容。)
    那用getTimestamp()方法就是 设置只填充固定的那列数据么?(刚刚学习java 刚刚接触JTable,如果哪问的太业余请见谅)
    是不是就是说前几个内容也是类似,直接获得第一列string,第二列int,第三列Timestamp这个意思?
      

  12.   

    尝试ING……
    Ps:你涨的很快啊  裤衩都没了=。=  小高手哈~
      

  13.   

    具体做项目一般都用Hibernate之类的ORM工具,你这里getObject从道理上也没错,刚刚我也是全部输出了内容。你用getTimestamp肯定OK的。我想问你一个问题,你贴出来的代码RowNum是怎么获得的呢?因为看到你用二维数组做数据模型,很让人蛋疼。
      

  14.   

    是用select count(*)……呵呵  高级工具还不会用呀 eclipse+cmd下的mysql……学习嘛,基础先打好 嘿嘿
      

  15.   

    对应代码贴出来,我看你怎么计算RowNum的
      

  16.   

    你对你的表执行下面的代码,我想即便用getObject也能完整打印出时间,假设数据只有10条吧
    你待会贴一下你控制台的时间打印出来的结果,我想应该是正常的
     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++;
            }
      

  17.   

    可以用getString()来取,不会被截断。
      

  18.   

    帮你解决了,其实jdbc得到的数据是完好的,有Timestamp的完整信息,之所以出问题是JTable对Timestamp的默认渲染器的问题,用自己实现的渲染器替代JTable的渲染器就可以了
      

  19.   

    谢谢大家的帮助 更特别感谢ioe_gaoyong倾力帮助
    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:这只是针对我这个初初学者的一点理解,如有不对欢迎讨论指正,谢谢