Hubungkan Java ke database MySQL
Bagaimana Anda terhubung ke database MySQL di Java?
Ketika saya mencoba, saya mengerti
Java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
at Java.sql.DriverManager.getConnection(DriverManager.Java:689)
at Java.sql.DriverManager.getConnection(DriverManager.Java:247)
Atau
Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Atau
Java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
DriverManager adalah cara yang cukup lama dalam melakukan sesuatu. Cara yang lebih baik adalah mendapatkan DataSource, baik dengan mencari satu yang sudah dikonfigurasikan oleh wadah server aplikasi Anda:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("Java:comp/env/jdbc/myDB");
atau instantiating dan mengkonfigurasi satu dari driver database Anda secara langsung:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
dan kemudian mendapatkan koneksi darinya, sama seperti di atas:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
The most convenient and reliable file storage service
Receive your personal cloud storage with 2Gb of space for freeBerikut ini adalah penjelasan langkah demi langkah cara menginstal MySQL dan JDBC dan cara menggunakannya:
nduh dan instal server MySQL . Lakukan saja seperti biasa. Ingat nomor port setiap kali Anda mengubahnya. Secara default
3306.nduh driver JDBC dan masukkan classpath , ekstrak file Zip dan letakkan file JAR yang berisi di classpath. Driver JDBC khusus vendor adalah implementasi konkret dari JDBC API ( tutorial di sini ).
Jika Anda menggunakan IDE seperti Eclipse atau Netbeans, maka Anda dapat menambahkannya ke classpath dengan menambahkan file JAR sebagai Library ke Build Path = di properti proyek.
Jika Anda melakukannya "plain Vanilla" di konsol perintah, maka Anda perlu menentukan path ke file JAR dalam argumen
-cpatau-classpathsaat menjalankan aplikasi Java Anda.Java -cp.;/Path/ke/mysql-connector.jar com.example.YourClass
.hanya ada di sana untuk menambahkan direktori current ke classpath juga sehingga ia dapat menemukancom.example.YourClassdan;adalah pemisah classpath seperti di Windows. Dalam Unix dan klon:harus digunakan.Buat database di MySQL . Mari kita membuat
javabasedatabase. Anda tentu saja ingin Dominasi Dunia, jadi mari kita gunakan UTF-8 juga.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;Buat pengguna untuk Java dan hibahaksesnya . Hanya karena menggunakan
rootadalah praktik yang buruk.CREATE USER 'Java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'Java'@'localhost' IDENTIFIED BY 'password';Ya,
Javaadalah nama pengguna danpasswordadalah kata sandi di sini.Tentukan URL JDBC . Untuk menghubungkan database MySQL menggunakan Java, Anda memerlukan URL JDBC dalam sintaks berikut:
jdbc: mysql: // hostname: port/databasename
hostname: Nama host tempat server MySQL diinstal. Jika diinstal di mesin yang sama di mana Anda menjalankan kode Java, maka Anda bisa menggunakanlocalhost. Itu juga bisa menjadi alamat IP seperti127.0.0.1. Jika Anda mengalami masalah konektivitas dan menggunakan127.0.0.1alih-alihlocalhostmenyelesaikannya, maka Anda memiliki masalah dalam konfigurasi jaringan/DNS/host Anda.port: Port TCP/IP tempat server MySQL mendengarkan. Ini secara default3306.databasename: Nama database yang ingin Anda sambungkan. Itujavabase.
Jadi URL akhir akan terlihat seperti:
jdbc: mysql: // localhost: 3306/javabase
ji koneksi ke MySQL menggunakan Java . Buat kelas Java sederhana dengan metode
main()untuk menguji koneksi.String url = "jdbc:mysql://localhost:3306/javabase"; String username = "Java"; String password = "password"; System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); }Jika Anda mendapatkan
SQLException: No suitable driver, maka itu berarti bahwa driver JDBC sama sekali tidak dimuat secara otomatis atau URL JDBC salah (mis. Itu tidak dikenali oleh driver yang dimuat). Biasanya, driver JDBC 4.0 harus di-autoload ketika Anda baru saja menjatuhkannya di runtime classpath. Untuk mengecualikan satu dan lainnya, Anda selalu dapat memuatnya secara manual seperti di bawah ini:System.out.println("Loading driver..."); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); }Perhatikan bahwa panggilan
newInstance()adalah tidakdiperlukan di sini. Hanya untuk memperbaikiorg.gjt.mm.mysql.Driveryang lama dan bermasalah. Penjelasan di sini . Jika baris ini melemparClassNotFoundException, maka file JAR yang berisi kelas driver JDBC sama sekali tidak ditempatkan di classpath.Perhatikan bahwa Anda tidak perlu memuat driver setiap kali sebelummenghubungkan. Hanya sekali saja selama startup aplikasi sudah cukup.
Jika Anda mendapatkan
SQLException: Connection refusedatauConnection timed outatauCommunicationsException: Communications link failurekhusus MySQL, maka itu berarti DB tidak dapat dijangkau sama sekali. Ini dapat memiliki satu atau lebih penyebab berikut:- Alamat IP atau nama host di URL JDBC salah.
- Nama host di URL JDBC tidak dikenali oleh server DNS lokal.
- Nomor port tidak ada atau salah dalam URL JDBC.
- Server DB sedang down.
- Server DB tidak menerima koneksi TCP/IP.
- Server DB kehabisan koneksi.
- Sesuatu di antara Java dan DB memblokir koneksi, mis. firewall atau proksi.
Untuk mengatasi yang satu atau yang lain, ikuti saran berikut:
- Verifikasi dan ujilah dengan
ping. - Segarkan DNS atau gunakan alamat IP dalam URL JDBC.
- Verifikasi berdasarkan
my.cnfdari MySQL DB. - Mulai DB.
- Verifikasi apakah mysqld dimulai tanpa
--skip-networking option. - Mulai ulang DB dan perbaiki kode Anda sehingga menutup koneksi di
finally. - Nonaktifkan firewall dan/atau konfigurasikan firewall/proxy untuk mengizinkan/meneruskan port.
Perhatikan bahwa menutup
Connectionadalah sangat penting. Jika Anda tidak menutup koneksi dan terus mendapatkan banyak dari mereka dalam waktu singkat, maka database mungkin kehabisan koneksi dan aplikasi Anda mungkin rusak. Selalu dapatkanConnectiondalam ---try-with-resourcesstatement . Atau jika Anda belum menggunakan Java 7, tutup secara eksplisit difinallydari bloktry-finally. Menutupfinallyhanya untuk memastikan bahwa itu ditutup juga jika ada pengecualian. Ini juga berlaku untukStatement,PreparedStatementdanResultSet.
Itu sejauh menyangkut konektivitas. Anda dapat menemukan di sini tutorial yang lebih maju bagaimana memuat dan menyimpan objek model Java yang layak dalam database dengan bantuan kelas DAO dasar.
Menggunakan Pola Singleton untuk koneksi DB adalah pendekatan yang buruk. Lihat di antara pertanyaan lain: http://stackoverflow.com/q/9428573/ . Ini adalah kesalahan pemula # 1.
Inisialisasi konstanta basis data
Buat nama pengguna, kata sandi, URL dan driver properti konstan, batas pemungutan suara, dll.
// init database constants
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit
Inisialisasi Koneksi dan Properti
Setelah koneksi dibuat, lebih baik menyimpan untuk tujuan penggunaan kembali.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
Buat Properti
Objek properti menyimpan informasi koneksi, periksa apakah sudah disetel.
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
Hubungkan Database
Sekarang terhubung ke database menggunakan konstanta dan properti yang diinisialisasi.
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
// Java 7+
e.printStackTrace();
}
}
return connection;
}
Putuskan koneksi basis data
Setelah Anda selesai dengan operasi database, tutup saja koneksi.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Semuanya bersama
Gunakan kelas ini MysqlConnect secara langsung setelah mengubah database_name, nama pengguna dan kata sandi dll.
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.SQLException;
import Java.util.Properties;
public class MysqlConnect {
// init database constants
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250";
// init connection object
private Connection connection;
// init properties object
private Properties properties;
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
return connection;
}
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Bagaimana cara menggunakan?
Inisialisasi kelas basis data.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
Di tempat lain dalam kode Anda ...
String sql = "SELECT * FROM `stackoverflow`";
try {
PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
... go on ...
... go on ...
... DONE ....
} catch (SQLException e) {
e.printStackTrace();
} finally {
mysqlConnect.disconnect();
}
Ini semua :) Jika ada yang perlu diperbaiki, edit! Semoga ini bermanfaat.
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";
// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
Inilah jumlah minimum yang Anda butuhkan untuk mendapatkan data dari database MySQL:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/foo", "root", "password");
Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();
Tambahkan penanganan pengecualian, konfigurasi, dll. Sesuai selera.
Flexible, reliable and affordable cloud hosting
Sign up and get $50 bonus within 30-day!Koneksi MySQL JDBC dengan useSSL.
private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");
private String connectToDb() throws Exception {
String jdbcDriver = "com.mysql.jdbc.Driver";
String dbUrl = "jdbc:mysql://" + db_server +
"?verifyServerCertificate=false" +
"&useSSL=true" +
"&requireSSL=true";
System.setProperty(jdbcDriver, "");
Class.forName(jdbcDriver).newInstance();
Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
Statement statement = conn.createStatement();
String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\"";
ResultSet resultSet = statement.executeQuery(query);
resultSet.next();
return resultSet.getString(1);
}
Kode pendek dan manis.
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
//Database Name - testDB, Username - "root", Password - ""
System.out.println("Connected...");
}
catch(Exception e)
{
e.printStackTrace();
}
Untuk SQL server 2012
try
{
String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123";
//KHILAN is Host and 1433 is port number
Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection(url);
System.out.println("Connected...");
}
catch(Exception e)
{
e.printStackTrace();
}
Anda dapat melihat semua langkah untuk menghubungkan database MySQL dari aplikasi Java di sini . Untuk database lain, Anda hanya perlu mengubah driver pada langkah pertama saja. Pastikan Anda memberikan jalur yang benar ke basis data dan memperbaiki nama pengguna dan kata sandi.
Kunjungi http://apekshit.com/t/51/Steps-to-connect-Database-using-Java
anda perlu memiliki tabung konektor mysql di classpath Anda.
di Java JDBC API membuat semuanya dengan database. menggunakan JDBC kita dapat menulis aplikasi Java ke
1. Kirim pertanyaan atau perbarui SQL ke DB (semua database relasional) 2. Ambil dan proses hasil dari DB
dengan tiga langkah di bawah ini kami dapat mengambil data dari Database apa pun
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
Connection Saya menggunakan beberapa waktu yang lalu, itu tampak seperti cara termudah, tetapi juga ada rekomendasi untuk membuat ada if pernyataan- tepat
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Atau sesuatu seperti itu :)
Mungkin ada beberapa kasus, sementara getConnection dapat mengembalikan null:)
The most convenient and reliable file storage service
Receive your personal cloud storage with 2Gb of space for freeKoneksi MySql JDBC:
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");
Statement stmt=con.createStatement();
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");
- Untuk mengatur Driver untuk menjalankan sampel cepat
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J
2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:
No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development
Java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
- Untuk mengatur CLASSPATH
Metode 1: mengatur variabel CLASSPATH.
export CLASSPATH=".:mysql-connector-Java-VERSION.jar"
Java MyClassFile
Dalam perintah di atas, saya telah mengatur CLASSPATH ke folder saat ini dan file mysql-connector-Java-VERSION.jar. Jadi ketika perintah Java MyClassFile dieksekusi, peluncur aplikasi Java akan mencoba memuat semua kelas Java di CLASSPATH. Dan ternyata Drive class => kesalahan BOOM hilang.
Metode 2:
Java -cp .:mysql-connector-Java-VERSION.jar MyClassFile
Catatan: Class.forName ("com.mysql.jdbc.Driver"); Ini sudah ditinggalkan saat ini 2019 Apr.
Semoga ini bisa membantu seseorang!
Tidak ada komentar:
Posting Komentar