J'essaie de récupérer les enregistrements de la table de base de données ORACLE en utilisant le pilote JDBC thin. La déclaration préparée J'utilise: (1)'select' preparedStatement avec l'horodatage retourne toujours vide RecordSet
SELECT (t1.LOGGED_TIME - ?) AS TDIFF, t1.ID, t1.STATUS, t1.LOGGED_TIME, t1.SERVER_TIME
FROM table_1 t1
WHERE (
((t1.LOGGED_TIME - ?) <= INTERVAL '10' DAY)
AND ((t1.LOGGED_TIME - ?) >= INTERVAL '-10' DAY))
ORDER BY t1.LOGGED_TIME DESC
où t1.LOGGED_TIME représente une colonne d'horodatage. Tous les trois paramètres sont des horodatages identiques réglés avec
java.sql.Timestamp controlTime = Timestamp.valueOf("2014-08-15 03:52:00");
lookupTime.setTimestamp(1, controlTime);
lookupTime.setTimestamp(2, controlTime);
lookupTime.setTimestamp(3, controlTime);
L'exécution du code fonctionne correctement - aucune exception ou avertissement n'est affiché. Néanmoins, le résultat retourné par
rs = lookupTime.executeQuery();
est vide.
Réglage de la requête à (2)
SELECT (t1.LOGGED_TIME - TO_TIMESTAMP('2014-08-15 03:52', 'yyyy-mm-dd hh24:mi')) AS TDIFF, t1.ID, t1.STATUS, t1.LOGGED_TIME, t1.SERVER_TIME
FROM table_1 t1
WHERE (
((t1.LOGGED_TIME - TO_TIMESTAMP('2014-08-15 03:52', 'yyyy-mm-dd hh24:mi')) <= INTERVAL '10' DAY)
AND ((t1.LOGGED_TIME - TO_TIMESTAMP('2014-08-15 03:52', 'yyyy-mm-dd hh24:mi')) >= INTERVAL '-10' DAY))
ORDER BY t1.LOGGED_TIME DESC
renvoie les données attendues. Lorsque j'interroge par ex. chaînes d'une autre colonne de la même table avec une instruction préparée le résultat est ok.
Qu'est-ce qui me manque ici? Où est le point? Une idée? Pour dire les choses clairement: il ne s'agit pas d'identifier un type de conversion de format date/heure incorrect dans (2). Cela conduira toujours à un message d'erreur Oracle et peut être corrigé facilement.
La question est: pourquoi le RecordSet retourné par prepareStatement (1) est-il vide (= pas un seul enregistrement) sans notification d'erreur? Si le format Timestamp est erroné, pourquoi n'y a-t-il pas d'erreur ou d'avertissement?
'TO_TIMESTAMP ('15/08/2014 03:52 ',' dd.mm.yy hh24: mi ') ': cela n'a pas beaucoup de sens. Le motif ne correspond pas à la chaîne. –
Comment peut-on vous croire que la deuxième requête renvoie quelque chose, alors que cette requête ne peut pas exécuter l'événement en raison d'erreurs? ==> le motif ne correspond pas à la valeur de 'TO_TIMESTAMP ('2014-08-15 03:52', 'dd.mm.yy hh24: mi ') '? – krokodilko
Vous avez raison. Copier et coller l'erreur. Je l'ai corrigé ... –