Witam
Jaki sterownik trzeba dodać do biblioteki projektu aby wykonywalny jar miał połączenie z bazą danych?
Program w eklips działa prawidłowo, natomiast wykonywalny jar daje błąd:
java.sql.SQLException: [Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego.
Próbowałem dołączyć sterowniki ze strony microsoftu (sqljdbc_4.0.2206.100_enu, sqljdbc_4.1.5605.100_enu, jtds-1.3.1-dist, sqljdbc_3.0.1301.101_enu) ale nie daje to pozytywnych rezultatów.
Może jest inny sposób?
Connection polaczenie = null;
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=BazaAA.mdb";
polaczenie = DriverManager.getConnection (url, "", "");//połączenie
Wyjątek zgłaszany jest na ostatniej linijce kodu powyżej.
Walczę dalej, ale brak poprawnego działania:
Wyskrobałem coś takiego do testów:
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class MsAccess {
private static final String USERNAME = "";
private static final String PASSWORD = "";
private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
private static final String URL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=CzystaBaza.mdb;}";
public static void main(String[] args) {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
zapisBledu(e);
e.printStackTrace();
}
Connection con = null;
try {
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
zapisBledu(e);
e.printStackTrace();
}
Statement stmt = null;
try {
stmt = con.createStatement();
} catch (SQLException e) {
zapisBledu(e);
e.printStackTrace();
}
try {
stmt.execute("CREATE TABLE Tabela2(ProduktID NUMBER,Cena CURRENCY, Data DATE)");
} catch (SQLException e) {
zapisBledu(e);
e.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
zapisBledu(e);
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
zapisBledu(e);
e.printStackTrace();
}
}
public static final void zapisBledu(Throwable e)
{
PrintWriter zapis = null;
try {
zapis = new PrintWriter("log.txt");
} catch (FileNotFoundException w) {
w.printStackTrace();
}
String komunikat = null;
try
{
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
e.printStackTrace( new PrintWriter(ostr,true) );
komunikat = ostr.toString();
}
catch (Exception f)
{
f.printStackTrace();
}
zapis.println(komunikat);
zapis.println("-----------------------------------------------------------------------------");
zapis.close();
}
}
Błąd z loga to:
java.sql.SQLException: [Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at MsAccess.main(MsAccess.java:30)
Nie za bardzo wiem jak to poprawnie zrobić. Może ma ktoś poprawny przykład.
W eclipsie wszystko działa poprawnie, plik z bazą jest w katalogu z plikiem wykonywalnym jar. Testuję na kilku komputerach i efekt jest taki sam.
Jakieś sugestie?