JDBC: Connexion retourner NULL, que faire?
C'est la sortie du programme donné ci-dessous:
Connection made!
Schema Name:null
Successfully connected to null
Releasing all open resources ...
À l'intérieur de establishConnection(), conn est initialisé à null. Ensuite, la première instruction dans le bloc try est censé établir une connexion avec la base de données, et la troisième instruction est l'impression du nom de l'actuel schéma de conn.
Selon la API, getSchema() renvoie le nom de schéma ou null si il n'y a aucun.
Cela signifie qu'il n'existe pas de schéma (je pense que le nom de schéma est le même que le nom de base de données) associé avec conn? Quelqu'un peut-il suggérer si je suis bon dans mon anticipation, et suggèrent également pourquoi il n'y a pas de schéma ou null associés avec conn?
public class ConnectDB {
private Connection establishConnection() throws SQLException {
Connection conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test_final1", "root", "password");
System.out.println("Connection made!");
System.out.println("Schema Name:"+conn.getSchema()+"\n");
} catch (SQLException sqle) {
System.err.println("SQL Exception thrown while making connection");
printSQLException(sqle);
}
return conn;
}
public static void main(String[] args) {
ConnectDB cdb= new ConnectDB();
Connection myconn=null;
try{
myconn=cdb.establishConnection();
if(myconn!=null) System.out.println("Successfully connected to " + myconn.getSchema());
}catch (SQLException e) {
ConnectDB.printSQLException(e);
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
ConnectDB.closeConnection(myconn);
}
}
Où est le code où vous avez chargé le
MYSQL Driver
Les gens! Le problème n'est pas sur l'obtention d'un
null
connexion, mais sur un null
valeur de retour de l'exécution de Connection#getSchema
méthode.OriginalL'auteur Solace | 2014-04-25
Vous devez vous connecter pour publier un commentaire.
MySQL ne supporte pas le concept de schéma. Pour MySQL, le schéma est en fait la base de données. De MySQL Glossaire:
Basé sur cette réponse de MySQL forums, vous ne pouvez pas obtenir la base de données actuelle (ou bases de données) à travers
Connexion#getSchema
méthode (qui a été ajouté depuis Java 7 avec JDBC 4) mais en utilisantConnexion#getCatalog
sauf si vous utilisez la dernière JDBC jar du pilote:J'ai fait un sale rapide pour prouver la phrase en italique ci-dessus (sauf si vous utilisez la dernière JDBC jar du pilote). À l'aide de
getCatalog()
travaillé à l'aide de Java 6:De sortie:
Puis j'ai exécuté le même code en Java 8 et décommenté la déclaration contenant
getSchema
à l'aide de mysql-connector-java-5.1.31-bin.jar (actuellement, la dernière version de Java Connecteur Pilote pour MySQL). C'était la sortie:Ce qui signifie qu'ils ne supportent pas
getSchema
méthode.Connexes:
OriginalL'auteur Luiggi Mendoza