如何从postgres db打印Java中的时间戳记值?

时间:2018-09-11 16:08:10

标签: java sql postgresql servlets data-access

我正在尝试使用这些功能访问数据库。我已经测试过查询并且可以正常工作,但是有两个问题: 1)我在PostgreSQL数据库中的区域类型中有时间戳记中的数据,当我尝试在Java中打印它们时,例如打印

01.01.1970  13.35

代替在数据库中写入的值。

2)当我使用servlet打印出url时,它将重复打印数据库中的第一个值,以重复其应打印的行数,而在DAO类中,它将打印正确的url值。

例如在DAO中它打印:

http://seesaa.net/cubilia.jpg01.01.1970  13.35
http://seesaa.net/cubilia.jpg01.01.1970  14.07
https://msn.com/sit/amet/consectetuer/adipiscing/elit.aspx01.01.1970  14.10
http://examiner.com/ultrices/posuere/cubilia/curae/donec/pharetra.png01.01.1970  14.27
https://google.co.uk/est/donec/odio/justo/sollicitudin/ut/suscipit.js01.01.1970  14.30
http://seesaa.net/cubilia.jpg01.01.1970  14.32
https://dyndns.org/nulla/justo.js01.01.1970  14.46
http://seesaa.net/cubilia.jpg01.01.1970  15.04

并在servlet中:

http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg
http://seesaa.net/cubilia.jpg

这是DAO类:

    public static ArrayList<SessioneLettura> cronologiaPagine(int id) {
            DBManager dbmanager = new DBManager();


Connection conn = dbmanager.getConnection();
        PreparedStatement pstmt;
        Pagina pagina= new Pagina();
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy  HH.mm");
        ArrayList<SessioneLettura> sessionelettura = new ArrayList<SessioneLettura>();
        try {

            pstmt = conn.prepareStatement(
                    "SELECT sessionelettura.url as url, sessionelettura.data as data FROM sessionelettura INNER JOIN sessione ON codice= sessionelettura.sessione WHERE sessione.utente=?");
            pstmt.setInt(1, id);

            ResultSet p = pstmt.executeQuery();
            while (p.next()) {

                pagina.setUrl(p.getString("url"));
                SessioneLettura s = new SessioneLettura((sdf.format(p.getTimestamp("data"))),pagina);
                System.out.println(s.getPagina().getUrl() + "" + s.getDataletta());
                sessionelettura.add(s);

            }

            conn.commit();
            pstmt.close();
            conn.close();
        } catch (

        SQLException e) {
            e.printStackTrace();

        }

        return sessionelettura;

    }

这是servlet:

private void cronologia(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("idUtente"));




        for (SessioneLettura sa : DataAccess.cronologiaPagine(id)) {
            String url = sa.getPagina().getUrl();
            System.out.println(url);
        }       


        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Cronologia.jsp?&idUtente="+id);
        request.setAttribute("cronologia", DataAccess.cronologiaPagine(id));
        dispatcher.forward(request, response);


    }

1 个答案:

答案 0 :(得分:0)

它根据您的代码正确执行。您写道:

SessioneLettura s = 
  new SessioneLettura((sdf.format(p.getTimestamp("data"))),pagina);

在这一行中,您写了p.getTimestamp("data")。您正在调用JDBC驱动程序以将TIMESTAMP WITH TIME ZONE列检索到java.sql.Timestamp。 JDBC驱动程序自动将该值转换为当前JVM的时区。

然后,您正在使用dd.MM.yyyy HH.mm格式进行打印。如果要查看检索到的值的时区,则将z设置为格式,例如dd.MM.yyyy HH.mm z