Eclipse 프로젝트의 여러 JDBC 파일
제 프로젝트에서는 SQLiteDB와 MariaDB를 모두 사용해야 합니다.
그래서 이클립스 프로젝트에서 jdbc 드라이버 파일(*.jar)을 가져왔습니다.
하지만 다음과 같은 오류가 발생했습니다.
코드:
public DBHelper() {
try {
driver = (Driver) Class.forName("org.sqlite.JDBC").newInstance();
DriverManager.registerDriver(driver);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
makeConnections();
}
public synchronized boolean makeConnections() {
try {
switch (ConnectionManager.getDatabaseType()) {
case SQLITE:
if (conn == null || conn.isClosed()) {
SQLiteConfig config = new SQLiteConfig();
config.setJournalMode(JournalMode.WAL);
conn = DriverManager.getConnection("jdbc:sqlite:data.sqlite", config.toProperties());
conn.setAutoCommit(false);
}
break;
case MARIADB:
if (conn == null || conn.isClosed()) {
conn = DriverManager.getConnection("jdbc:mariadb://data.mariadb");
conn.setAutoCommit(false);
}
break;
}
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
오류 메시지:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid connection URL url jdbc:sqlite:data.sqlite
at org.mariadb.jdbc.JDBCUrl.parse(JDBCUrl.java:144)
at org.mariadb.jdbc.Driver.connect(Driver.java:95)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at database.DBHelper.makeConnections(DBHelper.java:96)
at database.DBHelper.<init>(DBHelper.java:60)
at database.DBHelper.getSingleton(DBHelper.java:28)
저는 jdbc 드라이버를 "org.sqlite"라는 이름으로 분명히 등록했습니다.JDBC." 그런데 왜 로그 메시지에 "at org.mariadb.jdbc"가 포함되어 있는지 모르겠습니다.드라이버.connect(...)
MariaDB jdbc 파일(*.jar)이 제거되면 프로그램이 성공적으로 실행됩니다.
이것은 mariadb 1.2.0 jdbc 드라이버의 문제이며 다른 모든 jdbc 드라이버와 함께 발생합니다. 참조
https://mariadb.atlassian.net/plugins/servlet/mobile#issue/CONJ-167
이 코드 제거:
driver = (Driver) Class.forName("org.sqlite.JDBC").newInstance();
DriverManager.registerDriver(driver);
로 대체합니다.
Class.forName("org.sqlite.JDBC")
여기까지 하면 해당 드라이버를 로드할 수 있습니다.그 이유는 드라이버 클래스가 로드된 클래스에 의해 로드되면 드라이버 관리자에 자동으로 등록되기 때문입니다.MariaDB 드라이버 클래스에 대해서도 이 작업을 수행해야 합니다.
저는 혼자서 해결책을 찾았습니다.JDBC 4.0에서는ServiceLoader
수동으로 클래스를 로드하는 것 이외의 메커니즘.Class.ForName
는 더 이상 JDBC 드라이버를 명시적으로 로드하는 데 사용되지 않습니다.그래서 코드에서 다음 행을 제거했습니다.
try {
driver = (Driver) Class.forName("org.sqlite.JDBC").newInstance();
DriverManager.registerDriver(driver);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
위의 줄만 제거하면 프로그램이 자동으로 적절한 JDBC 드라이버를 찾아 작동이 잘 되었습니다.
언급URL : https://stackoverflow.com/questions/31508959/multiple-jdbc-files-on-eclipse-project
'programing' 카테고리의 다른 글
~True가 -2가 되는 이유는 무엇입니까? (0) | 2023.08.27 |
---|---|
언더스코어.js와 jQuery는 서로 보완합니까? (0) | 2023.08.27 |
실행하는 PowerShell 스크립트의 디렉터리를 가져오려면 어떻게 해야 합니까? (0) | 2023.08.27 |
XMLHttpRequest의 xhr.response와 xhr.responseText의 차이점은 무엇입니까? (0) | 2023.08.27 |
mariadb에서 SSL/TLS를 사용하도록 스프링 부트 애플리케이션을 구성하는 방법은 무엇입니까? (0) | 2023.08.27 |