【问题标题】:JDBC Driver in OSGI (Eclipse IDE)OSGI 中的 JDBC 驱动程序(Eclipse IDE)
【发布时间】:2011-06-16 20:50:54
【问题描述】:

我在让我的 OSGI 程序识别/使用 mysql jdbc 驱动程序时遇到了一些问题。

我有一个专门用于将数据输入 mysql 数据库的包。我已经复制了与测试程序(非 OSGI)中所有相同的方法。我无法通过 DriverManager.getConnection() 创建连接。

我已将驱动程序添加到类路径并尝试了此站点上的所有解决方案,例如使用 Class.forName()。可能我在 forName() 中输入了错误的字符串 arg。

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 放在 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...

有人对这个问题有任何见解吗?

谢谢

【问题讨论】:

  • Class.forName("ClassNameIsExpectedHereNotJarName");

标签: mysql jdbc osgi


【解决方案1】:

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

Class.forName("com.mysql.jdbc.Driver");

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2015-01-11
      • 1970-01-01
      • 2010-12-06
      • 2011-08-22
      相关资源
      最近更新 更多