J'utilise une base de données MySQL et un client Java JDBC pour y accéder.Mysql lire les données immédiatement après avoir écrit?
J'ai une table qui contient des informations de session. Chaque session est associée à un SessionToken. Ce jeton est une chaîne codée Base64 d'un hachage de certaines des valeurs de session. Cela devrait être unique. Et est défini comme varchar (50) dans le db.
Lorsque je tente de rechercher une session par son jeton je requête la base de données à l'aide d'une instruction SQL comme ceci:
select SessionId, ClientIP, PersonId, LastAccessTime, SessionCreateTime from InkaSession where SessionToken like 'exK/Xw0imW/qOtN39uw5bddeeMg='
J'ai un UnitTest qui teste cette fonctionnalité, et il échoue toujours, parce que la requête ne pas de retour de session, même difficile, je viens d'écrire la session à la DB.
Mon test d'unité effectue les opérations suivantes:
Create Connection via DriverManager.getConnection
Add a session via Sql Insert query
close the connection
create Connection via DriverManager.getConnection
look for the session via sql select
unit test fails, because nothing found
Lorsque je fais un pas dans cette UnitTest avec le débogueur et copie après la sélection sql qui est sur le point d'être envoyé à la DB en une ligne de commande mysql, il fonctionne bien, et je récupère la rangée de la session.
J'ai également essayé de récupérer une session plus ancienne à partir de la base de données en demandant un SessionToken plus ancien. Cela fonctionne bien aussi. Cela échoue seulement si je demande la SessionToken immédiatement après l'avoir insérée.
Toutes les connexions sont sur AutoCommit. Néanmoins, j'ai essayé de définir le niveau de transaction sur "Lire sans engagement". Cela n'a pas fonctionné non plus.
Quelqu'un a-t-il d'autres suggestions?
Oui, c'est essentiellement ce que j'ai fait. Sauf que, le commit() échouera à cause d'une erreur de syntaxe SQL. Ce que je trouve étrange. Je ferme() la connexion à la place. Quoi qu'il en soit, en mode Autocommit, cela ne devrait pas être nécessaire, n'est-ce pas? En outre, les données restent dans la base de données, donc je ne pense pas qu'il y ait une transaction inachevée. Y a-t-il un moyen d'être sûr? – Mario
Également tenté de désactiver AutoCommit et de valider explicitement. Cela fonctionne (c'est-à-dire que commit() ne déclenche plus d'exception), mais ne résout pas le problème. – Mario
Vous avez déjà vrsion 5.1.10 de Connector. – Mario