异常:找不到适合 jdbc:derby:\\serveraddress\db;create=false 的驱动程序
Exception: No suitable driver found for jdbc:derby:\\serveraddress\db;create=false
我知道这个问题已经被问过很多次了...但它总是指 JAVA。这次不行
- 代码是使用 derbyNET.dll 在 C# 中构建的(并从 .jar 编译为
.dll derby.dll 和 derbytools.dll)
- 在 Java 中编写的相同代码(并使用 javac 在 JAVA 中编译
&& java...) 仅当我在程序 runs:set 之前添加时才能正常工作
CLASSPATH=C:\PROGRA~1\Java\JDK18~1.0_7\DB-DER~1.0-B\lib\derby.jar;C:\PROGRA~1\Java\JDK18~1.0_7\DB-DER~ 1.0-B\lib\derbytools.jar;
- 用 C# 编写的代码抛出上述错误。我也试过改造
此代码从 java 到 c# 并且错误是相同的。
- 我很确定这个问题是因为 C# 看不到
作为驱动程序的库(derby.dll 和 derbytools.dll)
关于如何将此驱动程序添加到 visual studio 的任何建议?
C# 代码:
try{
DerbyNET derbyDB = new DerbyNET(@"\serveraddress\sql\db; create=false");
if (!derbyDB.openConnection()){
//Error opening Derby DB
Console.WriteLine("not connected");
return;
}
DataTable oDT = derbyDB.getRS("SELECT * FROM admin.user_data") as DataTable;
if (oDT.Columns[0].ColumnName == "Erro"){
//Read the ** ERRORS ** section below
Thread.Sleep(1000);
oDT = derbyDB.getRS("SELECT * FROM FROM admin.user_data") as DataTable;
}
else if (oDT.Rows.Count == 1 && oDT.Columns.Count == 1){
//Some error occured
String strError = derbyDB.getLastError();
return;
}
foreach (DataRow row in oDT.Rows){
Console.WriteLine("---ROW---");
foreach (var item in row.ItemArray){
Console.Write("Item: ");
Console.WriteLine(item);
}
}
derbyDB.closeConnection();
}
catch (Exception ex){
Console.WriteLine(ex.Message);
}
JAVA 中的代码:
try{
{
con = DriverManager.getConnection("jdbc:derby:\\serveraddress\sql\db;create=false");
Statement sta = con.createStatement();
ResultSet res = sta.executeQuery("SELECT * FROM ADMIN.USER_DATA");
java.lang.System.@out.println("ADMIN.USER_DATA: ");
while (res.next()){
java.lang.System.@out.println(" " + res.getString("USERID") + ", " + res.getString("PASSWORD") + ", " + res.getString("FIRST_NAME") + ", " + res.getString("LAST_NAME") +
", " + res.getString("EMAIL"));
}
res.close();
sta.close();
con.close();
}
}
catch (System.Exception e){
{
java.lang.System.err.println("Exception: " + e.getMessage());
}
}
我已经找到问题了。
1) 必须通过 ikvmc 将两个库 derbytools.jar 和 derby.jar 编译为 .dll 并添加为参考
2)需要添加NuGet包“IKVM.OpenJDK.Jdbc和IKVM.OpenJDK.Core
3) 当前代码是 (C#):
using System;
using System.Diagnostics;
using java.sql;
DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());
Connection derbyConn = DriverManager.getConnection("jdbc:derby:\\serveraddress\directory\sql\db;create=false");
Statement sta = derbyConn.createStatement();
ResultSet res = sta.executeQuery("SELECT * FROM tablename");
java.lang.System.@out.println("tablename: ");
while (res.next())
{
java.lang.System.@out.println(" " + res.getString("1stColumn") + ", " + res.getString("2ndColumn"));
}
res.close()
sta.close();
derbyConn.close();
我知道这个问题已经被问过很多次了...但它总是指 JAVA。这次不行
- 代码是使用 derbyNET.dll 在 C# 中构建的(并从 .jar 编译为 .dll derby.dll 和 derbytools.dll)
- 在 Java 中编写的相同代码(并使用 javac 在 JAVA 中编译 && java...) 仅当我在程序 runs:set 之前添加时才能正常工作 CLASSPATH=C:\PROGRA~1\Java\JDK18~1.0_7\DB-DER~1.0-B\lib\derby.jar;C:\PROGRA~1\Java\JDK18~1.0_7\DB-DER~ 1.0-B\lib\derbytools.jar;
- 用 C# 编写的代码抛出上述错误。我也试过改造 此代码从 java 到 c# 并且错误是相同的。
- 我很确定这个问题是因为 C# 看不到 作为驱动程序的库(derby.dll 和 derbytools.dll)
关于如何将此驱动程序添加到 visual studio 的任何建议?
C# 代码:
try{
DerbyNET derbyDB = new DerbyNET(@"\serveraddress\sql\db; create=false");
if (!derbyDB.openConnection()){
//Error opening Derby DB
Console.WriteLine("not connected");
return;
}
DataTable oDT = derbyDB.getRS("SELECT * FROM admin.user_data") as DataTable;
if (oDT.Columns[0].ColumnName == "Erro"){
//Read the ** ERRORS ** section below
Thread.Sleep(1000);
oDT = derbyDB.getRS("SELECT * FROM FROM admin.user_data") as DataTable;
}
else if (oDT.Rows.Count == 1 && oDT.Columns.Count == 1){
//Some error occured
String strError = derbyDB.getLastError();
return;
}
foreach (DataRow row in oDT.Rows){
Console.WriteLine("---ROW---");
foreach (var item in row.ItemArray){
Console.Write("Item: ");
Console.WriteLine(item);
}
}
derbyDB.closeConnection();
}
catch (Exception ex){
Console.WriteLine(ex.Message);
}
JAVA 中的代码:
try{
{
con = DriverManager.getConnection("jdbc:derby:\\serveraddress\sql\db;create=false");
Statement sta = con.createStatement();
ResultSet res = sta.executeQuery("SELECT * FROM ADMIN.USER_DATA");
java.lang.System.@out.println("ADMIN.USER_DATA: ");
while (res.next()){
java.lang.System.@out.println(" " + res.getString("USERID") + ", " + res.getString("PASSWORD") + ", " + res.getString("FIRST_NAME") + ", " + res.getString("LAST_NAME") +
", " + res.getString("EMAIL"));
}
res.close();
sta.close();
con.close();
}
}
catch (System.Exception e){
{
java.lang.System.err.println("Exception: " + e.getMessage());
}
}
我已经找到问题了。 1) 必须通过 ikvmc 将两个库 derbytools.jar 和 derby.jar 编译为 .dll 并添加为参考 2)需要添加NuGet包“IKVM.OpenJDK.Jdbc和IKVM.OpenJDK.Core 3) 当前代码是 (C#):
using System;
using System.Diagnostics;
using java.sql;
DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());
Connection derbyConn = DriverManager.getConnection("jdbc:derby:\\serveraddress\directory\sql\db;create=false");
Statement sta = derbyConn.createStatement();
ResultSet res = sta.executeQuery("SELECT * FROM tablename");
java.lang.System.@out.println("tablename: ");
while (res.next())
{
java.lang.System.@out.println(" " + res.getString("1stColumn") + ", " + res.getString("2ndColumn"));
}
res.close()
sta.close();
derbyConn.close();