0

I'm trying to get a simple jbang with dependency on class path sample working.
When I run the exact same java file (except for bulleted differences below) via jshell under Java 17, passing the same class path, it succeeds.

  • The function definition in the jshell version is static void b() throws ClassNotFoundException.
  • After starting jshell, I invoked it via B.b()

jshell 'D:\path\B.java' --class-path "C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar"

I added output of class path, my class path is present when running via jbang. I'm passing the java version to eliminate that difference.

jbang --java 17 --cp 'C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar' D:\path\B.java

Output follows. "No suitable driver" indicates it can't load the dependent jar that's on the class path:

C:\Users__.jbang\cache\jars\B.java.e22a3a302f133969cf194e974e813de59d453fcca7dc31fadde218d8503ab273\B.jar;"C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar"
Error: No suitable driver found for jdbc:sqlanywhere:HOST=127.0.0.1;UID=*****;PWD=__

Here are the Java file contents:

///usr/bin/env jbang "$0" "$@" ; exit $?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class B
{

    public static void main(String[] args)
    {
        System.out.println(System.getProperty("java.class.path"));
        try (Connection conn = DriverManager.getConnection("jdbc:sqlanywhere:HOST=127.0.0.1;UID=*****;PWD=******");
             PreparedStatement ps = conn.prepareStatement("select 1") )
        {
            try  (ResultSet rs = ps.executeQuery())
            {
                if (rs.next()) 
                {
                    System.out.println(rs.getInt(1));
                }
            } 
        }
        catch (SQLException e) 
        {
            System.out.println("Error: " + e.getMessage());
        }
    }

}
dudeNumber4
  • 4,217
  • 7
  • 40
  • 57
  • which version of jbang ? I get this error indicating jdbc driver is being loaded: "Exception in thread "main" java.lang.UnsatisfiedLinkError: no dbjdbc17 in java.library.path: /Users/manderse/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)" I'm wondering if the spaces in name causes issues? try put the jar local so you can do `--cp sajdbc4.jar` to avoid any spacing? – Max Rydahl Andersen Sep 01 '23 at 21:06

0 Answers0