JAVA/MSSQL: com.microsoft.sqlserver.jdbc.SQLServerException: La connexion est fermée
J'ai eu un problème avec les requêtes de base de données, lorsque j'essaie de les exécuter à partir de mon script groovy. Parfois, mais très souvent, j'ai une erreur:
com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:388)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(SQLServerConnection.java:2156)
Le module que j'ai utilisé pour la connexion à la base de données est:
import com.microsoft.sqlserver.jdbc.*;
def dbUser = "username"
def dbPassword = 'password'
def dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
def dbUrl = "jdbc:sqlserver://mssql-server"
def sql = Sql.newInstance(dbUrl, dbUser, dbPassword, dbDriver)
Le script lancé par le planificateur de tâches windows sur Windows Server 2012 toutes les 2 minutes. Et j'utilise l'ordinateur du développeur où je fais le code et l'exécution du script à partir de cette taille aussi. Il n'y a pas de problème de problème, lorsque j'ai utilisé la base de données MySQL, mais après la migration de base de données MSSQL, je vois cette erreur.
- S'il vous plaît montrer le script complet, en particulier l'exécution de la requête.
- Rotteveel requête est simple:
full_debug_query= "INSERT INTO log.dbo.debug (date, number1, number2, action, details, query) VALUES (GETDATE(),'"+number1+"','"+number2+"', '"+action+"', '"+comment+"', '"+query+"')"; try{sql.execute(full_debug_query);}catch(e){ex=e}
Vous devez vous connecter pour publier un commentaire.
Qui peut être causé par plusieurs raisons:
Un bug dans le script. La connexion est fermée quelque part (peut-être en raison d'une exception que vous ne le manipulez pas correctement) et puis vous essayez de l'utiliser à nouveau. Exception de contrôle et des ressources de la manipulation.
Que vous garder une connexion ouverte trop longtemps. Après un certain délai d'attente, la base de données se ferme la connexion de leur côté.
Quelqu'un redémarré le serveur de base de données.
C'est probablement pas un problème de firewall; les pare-feu il suffit de déposer les paquets lorsque la connexion arrive à expiration, alors l'application s'affiche à "accrocher" au lieu de donner un bon message d'erreur.
sql.close()
.The connection is closed.
car délai d'attente. Ce n'est pas mon exemple. J'ai eu cette erreur à la fois.PM com.microsoft.sqlserver.jdbc.TDSChannel enableSSL INFO: java.security path: c:\Program Files (x86)\Java\jdk1.8.0_51\jre\lib\security Security providers: [SUN version 1.8, SunRsaSign v,... bla-bla-bla
sql
de connexion, j'ai exécuter la requêtesql.execute("INSERT INTO log.dbo.debug (date, number1, number2, action, details, query) VALUES (GETDATE(),'12345678','1234567891', 'test', 'test', 'test') ")
select * from sys.dm_os_performance_counters where counter_name ='User Connections'
me montrer quecntr_value 59
etcntr_type 65792
.select * from sys.configurations where name ='user connections'
me montrer quevalue 0
,minimum 0
,maximum 32767
,value in use 0
The connection is closed
, la seconde est très bien. Puis-je exécuter à nouveau et le résultat est similaire: la première exécution de passe avec l'erreur et la deuxième est ok.. ressembler script n'est pas de fermer la connexion.. mais j'aisql.close()
en ellesql.close()
appel de sorte que vous pouvez voir si elle est réellement exécuté.