Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    SELECT data dal db access in java

    Buongiorno a tutti,
    ho riscontrato questo problema: Quando provo ad effettuare una select query di una tabella access di un campo che il tipo date mi restituisce un risultato con un formato diverso, mi spiego meglio con un esempio:
    se io ho una tabella con un campo Ora_di_Inizio (che ha il tipo date) e che contiene ad esempio 17.43.25 (hh:mm:ss),quando faccio questa query:
    SELECT Ora_di_Inizio FROM Info, mi restituisce la ora nel formato(AAAA:MM DD:hh::mm::ss) esempio: 1999,05,25,17.43.25
    Come potrei conservare anche nella query risultante lo stesso formato di questo attributo

    Grazie a tutti per le risposte!!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se il campo è di tipo Data, allora lo devi recuperare dal ResultSet usando getDate(), che restituisce un oggetto di tipo java.sql.Date.
    Tale oggetto rappresenta un istante nel tempo e, come tale, non ha nessuna formattazione: la formattazione con la quale "visualizzare" il suo valore la decidi tu con un apposito formatter (vedi SimpleDateFormat).

    Come ripeto sempre: le date non hanno un formato, sono un dato (come un numero) che rappresenta un istante nel tempo; il modo in cui visualizzarle si chiama "formattazione" e lo decidiamo noi programmatori, esattamente come per i numeri (possiamo deciderli di visualizarli con il separatore delle migliaia o meno, con degli zeri iniziali o meno, con il segno prima o dopo, ecc... tutte cose che non c'entrano nulla con il valore del dato, ma solo con la sua "rappresentazione").


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    LeleFT, grazie per la risposta, cmq ho provato e sono riuscito ma adesso ho un altro problemma, perchè allora se provo a fare tipo: SELECT * FROM Info WHERE Ora_di_Inizio = '17:05:23' non mi va, perchè dal quanto ho capito io lui vorrebbe il tipo TimeStamp, come faccio a fare questa query (sto utilizzando il db access)
    Ultima modifica di TotalNoob; 16-11-2015 a 20:51

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Usa i PreparedStatement, non costruire le query a mano in formato stringa: ciascun DBMS ha le sue "regole" sulla formattazione di particolari valori (in particolar modo le date).
    Innanzitutto verifica che tipo di dato vuole access. Esistono 3 tipi di dato:
    1) Date (solo data)
    2) Time (solo orario)
    3) DateTime (data e ora)

    A seconda del tipo di campo dovrai passargli un valore coerente. L'esempio di query che hai postato tu lascerebbe pensare ad un tipo di date "Time" (solo orario). In questo caso esiste il tipo java.sql.Time

    codice:
    java.sql.Time orario = java.sql.Time.valueOf("17:05:23");
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
       pstmt = con.prepareStatement("SELECT * FROM Info WHERE Ora_di_Inizio = ?");
       pstmt.setTime(1, orario);
    
       rs = pstmt.executeQuery();
       ...
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       if (rs != null) {
          try { rs.close(); } catch (Exception e) { }
       }
       if (pstmt != null) {
          try { pstmt.close(); } catch (Exception e) { }
       }
    }

    Per ciascun tipo di dato PreparedStatement prevede un metodo apposito: questo ti assicura la coerenza del dato passato e fa sì che sia il driver JDBC ad occuparsi della corretta conversione del dato nel formato previsto dal DBMS.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    LeleFT, grazie 1000 per la soluzione

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.