Oracle n'a pas de type de données "Time". Il a une DATE, qui est la date et l'heure précises à la seconde. Il a également un horodatage avec une plus grande précision.
Lorsque vous effectuez un appel to_date(), vous obtenez une date ... DATE! Selon la façon dont vous avez défini vos paramètres NLS, vous pouvez afficher le texte de cette date comme vous le souhaitez. Les paramètres NLS contrôlent des choses comme les formats de date, les formats d'horodatage, les caractères monétaires, les séparateurs décimaux, etc. Il est évident que vos paramètres NLS sont définis pour afficher les données DATE sous la forme aaaa-mm-jj.
Si vous essayez de créer des composants JDBC génériques avec des DATES Oracle, vous devez spécifier une valeur "statique" pour la partie "jour" de la date, puis spécifier l'heure. Considérez cet exemple:
String sql = "Select to_date('1970-01-01 ' || ? ,'YYYY-MM-DD HH24:MI:SS) as MY_TIME from dual";
Connection conn = null; //get Connection from somewhere
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, "16:31:59");
ResultSet rs = stmt.executeQuery();
rs.next(); //get to first element of result set;
java.sql.Time myTime = rs.getTime(1);
Le résultat de monTemps sera une valeur java.sql.Time contenant la valeur de 16:31:59. N'oubliez pas de conserver la valeur du jour pour la valeur constante (comme le 1970-01-01 ci-dessus) afin que les requêtes avec la clause Time dans la clause where fonctionnent correctement.
Merci. Pour une raison quelconque, je m'attendais à ce que les ingénieurs d'Oracle utilisent une partie de jour constante quand je ne spécifie qu'une heure dans TO_DATE(). –