editor php Yuzai menghadapi masalah apabila menggunakan JDBC dan SQLite Tidak kira betapa kerasnya dia mencuba, dia tidak dapat mencari pemandu yang sesuai. JDBC ialah antara muka standard untuk Java untuk menyambung ke pangkalan data, manakala SQLite ialah enjin pangkalan data hubungan tertanam ringan. Walau bagaimanapun, walaupun JDBC menyediakan pemacu untuk pelbagai pangkalan data, tiada pemacu yang direka khusus untuk SQLite. Ini menjadikan editor keliru dan tidak dapat menyambung dan mengendalikan pangkalan data SQLite secara normal. Dalam artikel seterusnya, kami akan meneroka cara untuk menyelesaikan masalah ini.
Untuk tujuan pembelajaran, saya cuba membuat program java yang mudah dan menyambung ke pangkalan data sqlite. Tetapi tidak kira bagaimana saya mencuba, saya tidak berjaya. Saya sentiasa mendapat no 适用于 jdbc:sqlite:database.db
pemandu. Tetapi ia sepatutnya begitu mudah. Saya telah mencuba banyak pemandu dari repositori maven.
Saya telah membaca dan memahami teori: jdbc api mengendalikan komunikasi dengan pengurus jdbc, manakala pemandu jdbc mengendalikan komunikasi dengan pangkalan data. Saya juga mengetahui bahawa apabila saya menjalankan fail kelas yang disusun, saya perlu menambah classpath pada fail .jar yang mengandungi pemacu pangkalan data. Sebagai contoh, seperti yang dijelaskan di sini.
Sesetengah tutorial mendakwa perlu menggunakan class.forname()
untuk mendaftarkan pemandu, tetapi dokumentasi oracle mengatakan:
applications no longer need to explicitly load jdbc drivers using class.forname()]
Juga, tutorial sqlite yang saya ikuti tidak pernah mendaftarkan pemandu sebelum menjalankan drivermanager.getconnection(url);
contoh sqlitetutorial.net
Dalam direktori saya e:project
Saya mempunyai fail ini:
database.java database.class database.db sqlite-jdbc-3.44.1.0.jar
Apabila saya menjalankan fail kelas yang disusun, saya menggunakan java -cp ".;sqlite-jdbc-3.44.1.0.jar" database
Ini kod saya:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DataBase { public static void connect() { Connection conn = null; try { String url = "jdbc:sqlite:database.db"; conn = DriverManager.getConnection(url); System.out.println("Connection is established"); conn.close(); System.out.println("Connection closed."); } catch (SQLException e) { System.out.println(e.getMessage()); } } // End method connect public static void main(String[] args) { connect(); } // End of main method } // End of class
Jika saya boleh mendapatkan sebarang bantuan untuk mendorong saya ke hadapan, saya akan sangat berterima kasih.
Saya rasa ia ada kaitan dengan tidak dapat mencari fail .jar, tetapi saya telah mencuba segala yang mungkin: meletakkan salinan fail .jar di mana-mana sahaja dalam direktori yang berbeza, menamakannya semula untuk menjadikannya lebih mudah dan apabila menambah Tambah berbilang laluan kelas direktori, dsb. Saya tidak tahu apa yang mungkin hilang.
Selain itu, apabila saya cuba melakukan perkara yang sama dalam vscode, dengan menambahkan fail .jar di bawah "Perpustakaan Dirujuk", ia masih tidak berfungsi.
Masalahnya ialah pemacu jdbc sqlite juga diperlukan slf4j-api-1.7.36.jar
, lihat repositori githubnya untuk butiran:
Dalam erti kata lain, anda juga perlu meletakkan slf4j-api-1.7.36.jar
ke dalam direktori tersebut dan menggunakan:
java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database
Pada mesin saya ini akan menjadikannya berfungsi:
d:\temp> java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database slf4j: failed to load class "org.slf4j.impl.staticloggerbinder". slf4j: defaulting to no-operation (nop) logger implementation slf4j: see http://www.slf4j.org/codes.html#staticloggerbinder for further details. connection is established connection closed.
Jika anda ada class.forname("org.sqlite.jdbc")
明确添加到您的应用程序中,您将能够诊断此问题,因为如果没有 slf4-api-1.7.36.jar
则会导致中(我将 class.forname
添加到 main
):
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at org.sqlite.JDBC.<clinit>(JDBC.java:26) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at DataBase.main(DataBase.java:23) Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 4 more
Jadi semasa memuatkan pemandu secara eksplisit tidak lagi diperlukan, ia boleh memberikan maklumat penyelesaian masalah tambahan.
Atas ialah kandungan terperinci JDBC dan SQLite - Saya tidak dapat mencari pemandu yang betul tidak kira apa yang saya cuba. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!