Paramètre de Délai d'attente Réseau pour la connexion JDBC
Je suis en train de définir un délai d'attente du réseau, mon Oracle Connexion de base de données en Java. Cependant, j'obtiens une erreur. Ci-dessous est un exemple de code et c'est respectifs exception.
try{
conn = new Database("oracle").connect();
conn.setNetworkTimeout(null, 30000); //I don't have an Executor, so the field is set to null
System.out.println(Switch.date() + " -> Database Connection Initialized");
}
catch(SQLException ex){
Logger.getLogger(Switch.class.getName()).log(Level.SEVERE, null, ex);
}
L'Exception que j'obtiens est:
Exception in thread "main" java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.setNetworkTimeout(Ljava/util/concurrent/Executor;I)V
at ke.co.smart.Switch.<init>(Switch.java:524)
at ke.co.smart.Switch.main(Switch.java:161)
Java Result: 1
Je crois qu'il a à faire avec une méthode abstraite (lire AbstractMethodError). Ce qui pourrait probablement la cause de cette erreur que j'ai mis en œuvre la méthode qui je pense est déjà définis dans Java, et donc, de ne pas refuser de compiler.
N. B.: Java ne permet pas de compilation de classes concrètes si il y a des méthodes abstraites.
Qu'est-ce que la version du pilote Oracle? Peut-être une version plus récente met en œuvre cette méthode. (note: les chiffres dans le nom de fichier "ojdbc6" ou "ojdbc5" pas version du pilote).
Si vous voulez vraiment résoudre les problèmes avec DCD(morts de la détection de connexions), vous devez passer à BEC pilotes et le configurer sur le BEC (en sqlnet.ora). La "meilleure" façon est d'utiliser TCP keepalive technique. Mais ce besoin de l'aide des Administrateurs de bases de données et administrateurs Unix.
Si vous voulez vraiment résoudre les problèmes avec DCD(morts de la détection de connexions), vous devez passer à BEC pilotes et le configurer sur le BEC (en sqlnet.ora). La "meilleure" façon est d'utiliser TCP keepalive technique. Mais ce besoin de l'aide des Administrateurs de bases de données et administrateurs Unix.
OriginalL'auteur Patrick Wanjau | 2013-09-16
Vous devez vous connecter pour publier un commentaire.
setNetworkTimeout()
a été introduit dans JDBC 4.1 et n'était pas présent dans JDBC 4.0.Vous voulez ojdbc7 depuis JDBC 4.1 seul est venu avec Java 7, si vous souhaitez utiliser
setNetworkTimeout()
méthode.La question sous-jacente est que l'ajout de méthodes pour des interfaces plus tard spécifications peut provoquer des anciennes implémentations de ces interfaces de rompre avec les erreurs. Une des nouvelles fonctionnalités de la prochaine Java 8, méthodes par défaut, devrait rendre cela un peu moins d'un problème.
Apparemment, il est aussi un pilote JDBC de la propriété pour Oracle, qui peut modifier la prise des délais d'attente.
Vous pouvez également essayer d'utiliser cet Oracle JDBC propriété pour définir le délai d'attente du socket, si vous utilisez le mince pilote:
Pour Oracle, les plus récents et les plus grands pilotes avec JDBC 4.1 prise en charge sont ici.
est-ce que "2000" milisecundum, ou secundum?
La documentation dit: > le Délai est exprimé en millisecondes.
Pour ceux qui veulent ajouter de la propriété de la connexion à l'url de connexion:
jdbc:oracle:thin:@host:1521:DB:oracle.net.CONNECT_TIMEOUT=2000;
OriginalL'auteur prunge
De l'Oracle de la documentation: "setNetworkTimeout déclenche une exception SQLException si: une base de données access erreur se produit, cette méthode est appelée sur une connexion fermée, l'exécuteur testamentaire est NULLE". Ce dernier semble être votre cas.
OriginalL'auteur Ga Sacchi
C'est un cas classique de l'évolution logicielle. Le fournisseur JDBC n'a pas donné la mise en œuvre de la méthode encore dans le pot que vous utilisez. On dirait que votre JDBC bibliothèque est assez vieux et vous pouvez essayer la dernière.
Téléchargez la dernière version de l'un de ici: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Essayer cette approche de la prise de ici:
Il n'est pas nécessaire que ojdbc6 ont mis en œuvre l'ensemble JDBC 4.0 spécification; peut-être l'une de la version mineure de qui ont mis en œuvre. Pourquoi ne pas essayer de télécharger la dernière, plus il a de chance de résoudre votre problème.
Pas de chance, juste essayé avec que sans succès, ses résultats dans la même erreur.
Trouvé une autre approche sur le forum, veuillez voir que.
lorsque vous exécutez le JDBC fichier jar, qui pilote version il un rapport?
OriginalL'auteur Gyanendra Dwivedi