Драйвер JDBC в OSGI (Eclipse IDE) - PullRequest
1 голос
/ 28 января 2011

У меня возникли некоторые проблемы с тем, чтобы заставить мои программы OSGI распознавать / использовать драйвер mysql jdbc.

У меня есть пакет, специально предназначенный для ввода данных в базу данных mysql.Я скопировал все те же методы, что и в тестовой программе (не OSGI).Я не могу создать соединение с помощью DriverManager.getConnection ().

Я добавил драйвер в путь к классам и перепробовал все решения на этом сайте, такие как использование Class.forName ().Возможно, я ввожу неправильную строку arg в forName ().

public void createConn(String URL, String DBName, String username, String password){

 try {
   Class.forName("mysql-connector-java-5.1.14-bin.jar");
  } catch (ClassNotFoundException e1) {
   e1.printStackTrace();
  }
  try {
   conn = DriverManager.getConnection(URL + DBName,username,password);
   System.out.println("Connection Created");
   stmt = conn.createStatement();
   System.out.println("Statement Created");
   //data = new ApplianceData();

   //flag = true;
   //this.writeThread = new Thread();
   //writeThread.start();

  } catch (SQLException e) {
   System.err.println(e.getMessage());
  }
}
  • Может кто-нибудь сказать мне аргумент, который они использовали в Class.forName ();

  • Кто-нибудь имеет решение этой проблемы или сталкивался с этим?


Спасибо, что позаботился об исключении classNotFound.Теперь у меня есть ошибка, утверждающая, что драйвер не подходит.Я знаю, что у OSGI есть некоторые проблемы с драйверами и т. Д. Кто-нибудь может порекомендовать способ обойти это?

Я поместил jdbc jar в папки bin установки java и в папку bin пакета.

ClassLoader DBHCL = ClassLoader.getSystemClassLoader();
DBHCL.loadClass("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver", true, DBHCL).newInstance();
System.out.println("Class Loaded");
//DriverManager.getDriver("jdbc:mysql://localhost/timedb");
//System.out.println("Driver Gotten");
conn = DriverManager.getConnection(URL + DBName,username,password);
System.out.println("Connection Created");
stmt = conn.createStatement();
System.out.println("Statement Created");
connFlag = true;

Вывод на консоль, ошибка: osgi> start 7 Служба базы данных (MYSQL) Начальный класс загружен Не найдено подходящего драйвера для jdbc: mysql: // localhost / timedb Исключение в потоке "Thread-1" INSERT INTO appliance1...

У кого-нибудь есть понимание этой проблемы?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Class.forName(String) принимает полное имя класса, а не файл JAR.Вы должны использовать что-то вроде

Class.forName("com.mysql.jdbc.Driver");
0 голосов
/ 21 декабря 2014

я знаю, что у этого есть 3 года, но я отвечаю на всякий случай, если кто-то гуглит это. проблема в том, что пакет не видит jar-файл из classloade, поэтому вам нужно импортировать его пакеты в манифест. То, как я это сделал, я создал отдельный комплект, содержащий jar коннектора mysql. newProject> плагин из существующего jar; Затем я добавил все его пакеты в «экспортированные пакеты» в файле манифеста. Затем в своем первом пакете я добавил все пакеты соединителя в «импортированные пакеты», и это сработало.

...