Quelle sera la commande
Class.forName("oracle.jdbc.driver.OracleDriver")
faire exactement lors de la connexion à une base de données Oracle? Existe-t-il une autre façon de faire la même chose?
Quelle sera la commande
Class.forName("oracle.jdbc.driver.OracleDriver")
faire exactement lors de la connexion à une base de données Oracle? Existe-t-il une autre façon de faire la même chose?
A
où j'appelle Class.forName("oracle.jdbc.driver.OracleDriver")
dans le A
constructeur de classe , et que je crée un A's
objet pour obtenir le champ de connexion pour chaque servlet où j'ai besoin d'une connexion, puis java sautera Class.forName("oracle.jdbc.driver.OracleDriver")
ou se chargera à nouveau?
Réponses:
Il obtient une référence à l'objet de classe avec le FQCN (nom de classe complet) oracle.jdbc.driver.OracleDriver
.
Il ne "fait" rien en termes de connexion à une base de données, à part s'assurer que la classe spécifiée est chargée par le chargeur de classe actuel . Il n'y a pas de différence fondamentale entre l'écriture
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");
Class.forName("com.example.some.jdbc.driver")
les appels apparaissent dans le code hérité qui utilise JDBC car c'est la manière héritée de charger un pilote JDBC .
À partir du didacticiel Java :
Dans les versions précédentes de JDBC, pour obtenir une connexion, vous deviez d'abord initialiser votre pilote JDBC en appelant la méthode
Class.forName
. Ces méthodes nécessitaient un objet de typejava.sql.Driver
. Chaque pilote JDBC contient une ou plusieurs classes qui implémentent l'interfacejava.sql.Driver
.
...
Tous les pilotes JDBC 4.0 trouvés dans votre chemin de classe sont automatiquement chargés. (Cependant, vous devez charger manuellement tous les pilotes avant JDBC 4.0 avec la méthodeClass.forName
.)
Class.forName()
sans capturer la référence à la driverClass retournée, donc cela semble à première vue comme une opération sans opération
Class.forName("etc.driver")
?
Class.forName(...)
.
À partir du didacticiel Java JDBC :
Dans les versions précédentes de JDBC, pour obtenir une connexion, vous deviez d'abord initialiser votre pilote JDBC en appelant la méthode
Class.forName
. Tous les pilotes JDBC 4.0 trouvés dans votre chemin de classe sont automatiquement chargés. (Cependant, vous devez charger manuellement tous les pilotes avant JDBC 4.0 avec la méthodeClass.forName
.)
Donc, si vous utilisez le pilote Oracle 11g (11.1) avec Java 1.6, vous n'avez pas besoin d'appeler Class.forName
. Sinon, vous devez l'appeler pour initialiser le pilote.
Class.forName
appel force le chargeur de classe à charger la classe donnée. Il s'agit de l'étape de chargement manuel décrite dans le tutoriel.
class.forName();
:)
Avant Java 6, la DriverManager
classe n'aurait pas su quel pilote JDBC vous vouliez utiliser. Class.forName("...")
était un moyen de pré-charger les classes de pilotes.
Si vous utilisez Java 6, vous n'avez plus besoin de le faire.
Cette commande charge la classe du pilote Oracle jdbc pour qu'elle soit disponible pour l'instance DriverManager. Une fois la classe chargée, le système peut se connecter à Oracle en l'utilisant. Comme alternative, vous pouvez utiliser la méthode registerDriver de DriverManager et la transmettre avec l'instance du pilote JDBC dont vous avez besoin.
Une alternative consiste à utiliser la propriété System jdbc.drivers pour spécifier vos pilotes requis sur la ligne de commande lorsque vous démarrez la JVM.
Utilisez oracle.jdbc.OracleDriver et non oracle.jdbc.driver.OracleDriver. Vous n'avez pas besoin de l'enregistrer si le fichier jar du pilote se trouve dans le répertoire "WEB-INF \ lib", si vous utilisez Tomcat. Enregistrez-le sous le nom test.jsp et placez-le dans votre répertoire Web, puis redéployez votre dossier d'application Web dans le gestionnaire Tomcat:
<%@ page import="java.sql.*" %>
<HTML>
<HEAD>
<TITLE>Simple JSP Oracle Test</TITLE>
</HEAD><BODY>
<%
Connection conn = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:XXXX:dbName", "user", "password");
Statement stmt = conn.createStatement();
out.println("Connection established!");
}
catch (Exception ex)
{
out.println("Exception: " + ex.getMessage() + "");
}
finally
{
if (conn != null) {
try {
conn.close();
}
catch (Exception ignored) {
// ignore
}
}
}
%>