Как напечатать значения меток времени в Java из postgres db? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь получить доступ к базе данных с помощью этих функций.Я уже проверил запрос, и он работает, но у меня есть две проблемы: 1) У меня есть данные в Timestamp с типом зоны в моей базе данных PostgreSQL, и когда я пытаюсь распечатать их в Java, он печатает, например,

01.01.1970  13.35

вместо значения, записанного в БД.

2) Когда я распечатываю 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

и в сервлете:

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

Thisэто класс 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;

    }

А это сервлет:

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 голосов
/ 11 сентября 2018

Он делает это правильно в соответствии с вашим кодом.Вы написали:

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.

...