Apa perintahnya
Class.forName("oracle.jdbc.driver.OracleDriver")
tepatnya dilakukan saat menghubungkan ke database Oracle? Apakah ada cara alternatif untuk melakukan hal yang sama?
Apa perintahnya
Class.forName("oracle.jdbc.driver.OracleDriver")
tepatnya dilakukan saat menghubungkan ke database Oracle? Apakah ada cara alternatif untuk melakukan hal yang sama?
A
tempat saya memanggil konstruktor Class.forName("oracle.jdbc.driver.OracleDriver")
kelas A
, dan saya membuat A's
objek untuk mendapatkan bidang koneksi untuk setiap servlet di mana saya memerlukan koneksi maka java akan melewati Class.forName("oracle.jdbc.driver.OracleDriver")
atau akan memuat lagi?
Jawaban:
Ini memperoleh referensi ke objek kelas dengan FQCN (nama kelas yang memenuhi syarat) oracle.jdbc.driver.OracleDriver
.
Itu tidak "melakukan" apa pun dalam hal menghubungkan ke database, selain dari memastikan bahwa kelas yang ditentukan dimuat oleh classloader saat ini . Tidak ada perbedaan mendasar antara menulis
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");
Class.forName("com.example.some.jdbc.driver")
panggilan muncul di kode lama yang menggunakan JDBC karena itu adalah cara lama untuk memuat driver JDBC .
Dari Tutorial Java :
Di versi JDBC sebelumnya, untuk mendapatkan koneksi, Anda harus menginisialisasi driver JDBC Anda terlebih dahulu dengan memanggil metode tersebut
Class.forName
. Metode ini membutuhkan objek bertipejava.sql.Driver
. Setiap driver JDBC berisi satu atau lebih kelas yang mengimplementasikan antarmukajava.sql.Driver
.
...
Semua driver JDBC 4.0 yang ditemukan di jalur kelas Anda dimuat secara otomatis. (Namun, Anda harus memuat driver apa pun secara manual sebelum JDBC 4.0 dengan metode iniClass.forName
.)
Class.forName()
tanpa menangkap referensi ke driverClass yang dikembalikan, jadi tampaknya sekilas seperti operasi tanpa operasi
Class.forName("etc.driver")
?
Class.forName(...)
.
Dari tutorial Java JDBC :
Di versi JDBC sebelumnya, untuk mendapatkan koneksi, Anda harus menginisialisasi driver JDBC Anda terlebih dahulu dengan memanggil metode tersebut
Class.forName
. Semua driver JDBC 4.0 yang ditemukan di jalur kelas Anda akan dimuat secara otomatis. (Namun, Anda harus memuat driver apa pun secara manual sebelum JDBC 4.0 dengan metode iniClass.forName
.)
Jadi, jika Anda menggunakan driver Oracle 11g (11.1) dengan Java 1.6, Anda tidak perlu menelepon Class.forName
. Jika tidak, Anda perlu memanggilnya untuk menginisialisasi driver.
Class.forName
pasukan panggilan classloader untuk memuat kelas tertentu. Ini adalah langkah pemuatan manual yang dijelaskan dalam tutorial.
class.forName();
:)
Sebelum Java 6 DriverManager
kelas tidak akan tahu driver JDBC mana yang ingin Anda gunakan. Class.forName("...")
adalah cara untuk melakukan pramuat kelas pengemudi.
Jika Anda menggunakan Java 6, Anda tidak perlu lagi melakukan ini.
Perintah ini memuat kelas driver jdbc Oracle agar tersedia untuk instance DriverManager. Setelah kelas dimuat sistem dapat terhubung ke Oracle menggunakannya. Sebagai alternatif, Anda dapat menggunakan metode registerDriver dari DriverManager dan meneruskannya dengan instance driver JDBC yang Anda butuhkan.
Alternatifnya adalah menggunakan properti Sistem jdbc.drivers untuk menentukan driver yang Anda perlukan pada baris perintah saat Anda memulai JVM.
Gunakan oracle.jdbc.OracleDriver, bukan oracle.jdbc.driver.OracleDriver. Anda tidak perlu mendaftarkannya jika file jar driver ada di direktori "WEB-INF \ lib", jika Anda menggunakan Tomcat. Simpan ini sebagai test.jsp dan letakkan di direktori web Anda, dan terapkan ulang folder aplikasi web Anda di manajer 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
}
}
}
%>