异常:没有找到适合jdbc:derby:serveraddressdb的驱动程序;create=false



我知道这个问题已经被问了很多次了。。。但它总是指JAVA。这次不是

  1. 代码是使用derbyNET.dll在C#中构建的(并从.jar编译到.dll derby.dll和derbytools.dll)
  2. 用Java编写的相同代码(也使用javac用Java编译&java…)只有在程序运行前添加时才能正常工作:setCLASSPATH=C:\PROGRA~1\Java\JDK18~1.07\DB-DER~1.0-B\lib\derby.jar;C: \PROGRA~1\Java\JDK18~1.07\DB-DER~1.0-B\lib\derbytools.jar
  3. 用C#编写的代码引发了上述错误。我也试着转型从java到c的这段代码和错误是一样的
  4. 我很确定这个问题是因为C#没有看到库作为驱动程序(derby.dll和derbytools.dll)

如何将此驱动程序添加到visual studio有什么建议吗?

C#中的代码:

try{
    DerbyNET derbyDB = new DerbyNET(@"\serveraddresssqldb;        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) 两个库derbytools.jar和derby.jar必须通过ikvmc编译到.dll并添加为引用2) 需要添加NuGet包"IKVM.OpenJDK.Jdbc和IKVM.OOpenJDK.Core3) 当前代码为(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();

最新更新