PawelD
PawelD

Reputation: 41

Exception: No suitable driver found for jdbc:derby:\\serveraddress\db;create=false

I know that this question has been asked many times... BUT it was always referring to JAVA. not this time

  1. Code is built in C# using derbyNET.dll (and compiled from .jar to .dll derby.dll and derbytools.dll)
  2. The same code written in Java (and also compiled in JAVA using javac && java...) works properly only if i add before program 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;
  3. code written in C# throws mentioned error. I tried also transform this code from java to c# and error was the same.
  4. I am pretty sure that issue is caused because C# do not see the libraries as driver (derby.dll and derbytools.dll)

Any advice how add this driver to visual studio?

CODE in 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);
}

CODE in 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");
       [email protected]("ADMIN.USER_DATA: ");
      while (res.next()){
         [email protected]("  " + 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());
      }
  }

Upvotes: 1

Views: 562

Answers (1)

PawelD
PawelD

Reputation: 41

I have figured out the issue. 1) two libraries derbytools.jar and derby.jar have to be compiled via ikvmc to .dll and add as reference 2) need to add NuGet package "IKVM.OpenJDK.Jdbc and IKVM.OpenJDK.Core 3) current code is (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");
[email protected]("tablename: ");
            while (res.next())
            {

                [email protected]("  " + res.getString("1stColumn") + ", " + res.getString("2ndColumn"));
            }
            res.close()
            sta.close();
            derbyConn.close();

Upvotes: 2

Related Questions