Quale sarà il comando
Class.forName("oracle.jdbc.driver.OracleDriver")
fare esattamente durante la connessione a un database Oracle? C'è un modo alternativo per fare la stessa cosa?
Quale sarà il comando
Class.forName("oracle.jdbc.driver.OracleDriver")
fare esattamente durante la connessione a un database Oracle? C'è un modo alternativo per fare la stessa cosa?
Acui chiamo il costruttore della Class.forName("oracle.jdbc.driver.OracleDriver")classe Ae creo un A'soggetto per ottenere il campo di connessione per ogni servlet in cui ho bisogno della connessione, quindi java salterà Class.forName("oracle.jdbc.driver.OracleDriver")o caricherà di nuovo?
Risposte:
Ottiene un riferimento all'oggetto classe con FQCN (nome classe completo) oracle.jdbc.driver.OracleDriver.
Non "fa" nulla in termini di connessione a un database, a parte garantire che la classe specificata sia caricata dal classloader corrente . Non c'è differenza fondamentale tra la scrittura
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");
Class.forName("com.example.some.jdbc.driver")le chiamate vengono visualizzate nel codice legacy che utilizza JDBC perché questo è il modo legacy di caricare un driver JDBC .
Dal tutorial Java :
Nelle versioni precedenti di JDBC, per ottenere una connessione, era necessario innanzitutto inizializzare il driver JDBC chiamando il metodo
Class.forName. Questo metodo richiedeva un oggetto di tipojava.sql.Driver. Ogni driver JDBC contiene una o più classi che implementano l'interfacciajava.sql.Driver.
...
Tutti i driver JDBC 4.0 che si trovano nel percorso classi vengono caricati automaticamente. (Tuttavia, è necessario caricare manualmente tutti i driver precedenti a JDBC 4.0 con il metodoClass.forName.)
Class.forName()senza catturare il riferimento alla driverClass restituita, quindi a prima vista sembra un'operazione non operativa
Class.forName("etc.driver")?
Class.forName(...).
Dal tutorial Java JDBC :
Nelle versioni precedenti di JDBC, per ottenere una connessione, era necessario innanzitutto inizializzare il driver JDBC chiamando il metodo
Class.forName. Tutti i driver JDBC 4.0 trovati nel percorso classi vengono caricati automaticamente. (Tuttavia, è necessario caricare manualmente tutti i driver precedenti a JDBC 4.0 con il metodoClass.forName.)
Quindi, se stai utilizzando il driver Oracle 11g (11.1) con Java 1.6, non è necessario chiamare Class.forName. Altrimenti, è necessario chiamarlo per inizializzare il driver.
Class.forNamechiamata forza il programma di caricamento classi a caricare la classe data. Questa è la fase di caricamento manuale descritta nel tutorial.
class.forName();:)
Prima di Java 6 la DriverManagerclasse non avrebbe saputo quale driver JDBC si desiderava utilizzare. Class.forName("...")era un modo per precaricare le classi di driver.
Se stai usando Java 6 non è più necessario farlo.
Questo comando carica la classe del driver Oracle jdbc da rendere disponibile per l'istanza DriverManager. Dopo che la classe è stata caricata, il sistema può connettersi a Oracle utilizzandola. In alternativa puoi utilizzare il metodo registerDriver di DriverManager e passarlo con l'istanza del driver JDBC di cui hai bisogno.
Un'alternativa sarebbe quella di utilizzare la proprietà di sistema jdbc.drivers per specificare i driver richiesti sulla riga di comando quando si avvia la JVM.
Utilizza oracle.jdbc.OracleDriver, non oracle.jdbc.driver.OracleDriver. Non è necessario registrarlo se il file jar del driver si trova nella directory "WEB-INF \ lib", se si utilizza Tomcat. Salvalo come test.jsp e inseriscilo nella tua directory web e ridistribuisci la cartella della tua app web nel gestore 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
}
}
}
%>