有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java日期格式SQL

我有一个名为Abbonamento的表,它具有以下属性:

Abbonamento(idAbbonamento, tipo, DataInizio, DataScadenza, ....)

Datanizio和DataScadenza属于DATE类型。 当我在此表上进行选择时,问题就出现了:

        String queryAbb = "select idabbonamento, tipo, DATE_FORMAT(datainizio,'%d-%m-%Y'), DATE_FORMAT(datascadenza,'%d-%m-%Y'), ...;
                       prest = con.prepareStatement(queryAbb);
        rs = prest.executeQuery();
        while (rs.next()) {
            a=new Abbonamento();
            a.setIdAbbonamento(rs.getInt(1));
            a.setTipo(rs.getString(2));
            a.setDataInizio(rs.getDate(3));
            System.out.println(rs.getDate(3)); 
            a.setDataScadenza(rs.getDate(4));
            ...
        }

现在,如果数据库中的日期数据化是例如2013-11-05 00:00:00,我希望有05-11-2013,但是println打印0004-10-13

上面的代码有什么问题


共 (3) 个答案

  1. # 1 楼答案

    而不是

    rs.getDate(3)
    

    你应该使用

    rs.getString(3)
    

    因为数据已经格式化为字符串。如果您想获得Date,首先,从05-11-2013字符串创建一个日期对象,然后您将收到该对象

    如果对象中有Date个对象,则应该使用与从DB返回的格式相同的返回字符串,或者让JDBC为您进行转换(在本例中,只需select idabbonamento, tipo, datainizio, ...),而不进行格式化

    我建议让JDBC来做。更少的用户代码,更少的麻烦:)

    String queryAbb = "select idabbonamento, tipo, datainizio, datascadenza, ...";
    ...
    a.setDataInizio(rs.getDate(3));
    // reading the formatted data:
    System.out.println(new SimpleDateFormat().format(a.getDataInizio());
    

    实际上,还有一个技巧,但您不必关心:rs.getDate()返回java.sql.Date,但您可能使用java.util.Date。这不是问题,因为java。sql。Date是java的一个子类。util。日期,因此此作业完全有效

  2. # 2 楼答案

    以独立于数据库的方式,可以使用^{}。例如:

    java.util.Date date = rs.getDate(3);
    String dateFormatted = (new java.text.SimpleDateFormat()).format(date);
    a.setDataInizio(dateFormatted);
    
  3. # 3 楼答案

    试试这个:

    select idabbonamento, tipo, convert(char(10), datainizio, 105)....