我在使用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 ...
有人对此问题有任何了解吗?
由于
答案 0 :(得分:2)
Class.forName(String)
采用完全限定的类名,而不是jar文件。你应该使用像
Class.forName("com.mysql.jdbc.Driver");
答案 1 :(得分:0)
我知道这已经有3年了,但我正在回答以防万一有人用谷歌搜索它。 所以问题是bundle没有从classloade中看到jar,所以你需要在manifest中导入它的包。 我的方式是,我创建了一个包含mysql连接器jar的独立包。 newProject>来自现有jar的插件;然后我将其所有包添加到其清单文件中的“导出包”。然后在我的第一个软件包中,我将连接器的所有软件包添加到“导入的软件包”中,然后就可以了。