OSGI中的JDBC驱动程序(Eclipse IDE)

时间:2011-01-27 21:37:05

标签: mysql jdbc osgi

我在使用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 Exception。现在我有一个错误说明驱动程序不适合。我知道OSGI在驱动程序等方面存在一些问题。有人可以推荐一种方法来规避这个问题吗?

我已将jdbc jar放在java安装bin文件夹中,并放在bundle的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的>开始7 数据库服务(MYSQL)开始 加载类 找不到适合jdbc的驱动程序:mysql:// localhost / timedb 线程“Thread-1”中的异常INSERT INTO appliance1 ...

有人对此问题有任何了解吗?

由于

2 个答案:

答案 0 :(得分:2)

Class.forName(String)采用完全限定的类名,而不是jar文件。你应该使用像

这样的东西
Class.forName("com.mysql.jdbc.Driver");

答案 1 :(得分:0)

我知道这已经有3年了,但我正在回答以防万一有人用谷歌搜索它。 所以问题是bundle没有从classloade中看到jar,所以你需要在manifest中导入它的包。   我的方式是,我创建了一个包含mysql连接器jar的独立包。 newProject>来自现有jar的插件;然后我将其所有包添加到其清单文件中的“导出包”。然后在我的第一个软件包中,我将连接器的所有软件包添加到“导入的软件包”中,然后就可以了。