in reply to Re^2: Inline Java not working
in thread Inline Java not working

main::java::lang::ClassNotFoundException

Java does not find a required class.

// Load Teradata JDBC driver Class.forName("com.teradata.jdbc.TeraDriver");

Are you sure that is sufficient? According to https://docs.oracle.com/javase%2F7%2Fdocs%2Fapi%2F%2F/java/lang/Class.html#forName(java.lang.String), this method may return a class object, but it does not initialize it. This method is documented to throw a ClassNotFoundException, so its parameter is likely to be the first problem. Java has no clue where to find the class file.

// Establish the connection Connection connection = DriverManager.getConnection(jdbcUrl, username, + password);

According to https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html#getConnection-java.lang.String-java.lang.String-java.lang.String-, this method does not throw a ClassNotFoundException. But:

The DriverManager attempts to select an appropriate driver from the set of registered JDBC drivers.

And that might be the second problem: The JDBC driver must somehow be registered. My guess is that that happens when the driver class is initialized, which does not happen in your code.

https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html#registerDriver-java.sql.Driver- explains:

Registers the given driver with the DriverManager. A newly-loaded driver class should call the method registerDriver to make itself known to the DriverManager.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Replies are listed 'Best First'.
Re^4: Inline Java not working
by mallett76 (Beadle) on Feb 17, 2024 at 14:09 UTC

    Yahoo! - I solved the problem - wasn't easy, but I did it. I'll share my code in case anyone else has the issue. The big item was I had to point to my class path jar file to point to terajdbc4.jar

    use strict; use warnings; use Inline Java => <<'END' => CLASSPATH => 'C:/jars/terajdbc4.jar'; import java.sql.Connection; import java.util.*; import java.sql.DriverManager; import java.sql.SQLException; import java.io.PrintWriter; import java.sql.*; public class TeradataConnectionTest { public static void testConnection(String jdbcUrl, String username, Str +ing password) { try { System.out.println("Test up to part 1"); //e.printStackTrace(); //DriverManager.registerDriver(new com.teradata.jdbc.TeraDriver()); //DriverManager.registerDriver(new com.teradata.jdbc.TeraDriver()); Di +d not work Class.forName("com.teradata.jdbc.TeraDriver"); //Did not work // Class.forName("com.ncr.teradata.TeraDriver"); Did not work Connection connectionA = DriverManager.getConnection(jdbcUrl, username +, password); System.out.println("Test up to part 2"); System.out.println("Connected to Teradata!"); // Perform your database operations here connectionA.close(); } catch (SQLException e) { // Print the stack trace or error message e.printStackTrace(); System.err.println("SQLException: " + e.getMessage()); } catch (Exception e) { // Handle other exceptions e.printStackTrace(); } } } END # Your Teradata connection details #COMMENTED OUT ON 2/14/24 my $jdbcUrl = "jdbc:teradata://XXX.XX.XXX.XX +/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW"; #Here is my JAVA connection String url = "jdbc:teradata://XXX.XX.XXX. +XX/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW"; #commented out on 2/16/24 my $jdbcUrl = "jdbc:teradata://XXX.XX.XXX.XX +/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW;Ter +aDriver=com.teradata.jdbc.TeraDriver"; my $jdbcUrl = "jdbc:teradata://XXX.XX.XXX.XX/TMODE=TERA,DBS_PORT=1025, +CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW"; #my $jdbcUrl = "jdbc:teradata://XXX.XX.XXX.XX/TMODE=TERA,DBS_PORT=1025 +,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW"; my $username = "XXXXX"; my $password = "XXXXXX"; # Call the Java method to test the connection TeradataConnectionTest->testConnection($jdbcUrl, $username, $password) +;
Re^4: Inline Java not working
by mallett76 (Beadle) on Feb 15, 2024 at 15:41 UTC

    I believe I am getting closer. Running the below code

    use strict; use warnings; use Inline Java => <<'END'; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.io.PrintWriter; public class TeradataConnectionTest { public static void testConnection(String jdbcUrl, String username, Str +ing password) { try { DriverManager.setLogWriter(new PrintWriter(System.out)); //DriverManager.registerDriver(new com.teradata.jdbc.TeraDriver()); Di +d not work //Class.forName("com.teradata.jdbc.TeraDriver"); Did not work // Class.forName("com.ncr.teradata.TeraDriver"); Did not work Connection connection = DriverManager.getConnection(jdbcUrl, username, + password); System.out.println("Connected to Teradata!"); // Perform your database operations here connection.close(); } catch (SQLException e) { // Print the stack trace or error message e.printStackTrace(); System.err.println("SQLException: " + e.getMessage()); } catch (Exception e) { // Handle other exceptions e.printStackTrace(); } } } END # Your Teradata connection details my $jdbcUrl = "jdbc:teradata://172.28.130.20/TMODE=TERA,DBS_PORT=1025, +CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW;TeraDriver=com.teradata.jdbc. +TeraDriver"; my $username = "XXXXX"; my $password = "XXXXX"; # Call the Java method to test the connection TeradataConnectionTest->testConnection($jdbcUrl, $username, $password) +;

    I am receiving the following error:

    DriverManager.getConnection("jdbc:teradata://172.28.130.20/TMODE=TERA, +DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW;TeraDriver=com. +teradata.jdbc.TeraDriver") registerDriver: io.trino.jdbc.TrinoDriver@2dd9625c DriverManager.initialize: jdbc.drivers = null JDBC DriverManager initialized trying io.trino.jdbc.TrinoDriver getConnection: no suitable driver found for jdbc:teradata://172.28.130 +.20/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW; +TeraDriver=com.teradata.jdbc.TeraDriver java.sql.SQLException: No suitable driver found for jdbc:teradata://17 +2.28.130.20/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMOD +E=ALLOW;TeraDriver=com.teradata.jdbc.TeraDriver at java.sql/java.sql.DriverManager.getConnection(DriverManager +.java:708) at java.sql/java.sql.DriverManager.getConnection(DriverManager +.java:230) at TeradataConnectionTest.testConnection(TeradataConnectionTes +t.java:15) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.i +nvoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at InlineJavaUserClassLink.invoke(InlineJavaUserClassLink.java +:11) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.i +nvoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at org.perl.inline.java.InlineJavaUserClassLoader.invoke_via_l +ink(InlineJavaUserClassLoader.java:86) at org.perl.inline.java.InlineJavaUserClassLoader.invoke(Inlin +eJavaUserClassLoader.java:131) at org.perl.inline.java.InlineJavaProtocol.CallJavaMethod(Inli +neJavaProtocol.java:283) at org.perl.inline.java.InlineJavaProtocol.Do(InlineJavaProtoc +ol.java:41) at org.perl.inline.java.InlineJavaServer.ProcessCommand(Inline +JavaServer.java:153) at org.perl.inline.java.InlineJavaServer.ProcessCommand(Inline +JavaServer.java:142) at org.perl.inline.java.InlineJavaServerThread.run(InlineJavaS +erverThread.java:51) SQLException: SQLState(08001) java.sql.SQLException: No suitable driver found for jdbc:teradata://17 +2.28.130.20/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMOD +E=ALLOW;TeraDriver=com.teradata.jdbc.TeraDriver at java.sql/java.sql.DriverManager.getConnection(DriverManager +.java:708) at java.sql/java.sql.DriverManager.getConnection(DriverManager +.java:230) at TeradataConnectionTest.testConnection(TeradataConnectionTes +t.java:15) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.i +nvoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at InlineJavaUserClassLink.invoke(InlineJavaUserClassLink.java +:11) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.i +nvoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at org.perl.inline.java.InlineJavaUserClassLoader.invoke_via_l +ink(InlineJavaUserClassLoader.java:86) at org.perl.inline.java.InlineJavaUserClassLoader.invoke(Inlin +eJavaUserClassLoader.java:131) at org.perl.inline.java.InlineJavaProtocol.CallJavaMethod(Inli +neJavaProtocol.java:283) at org.perl.inline.java.InlineJavaProtocol.Do(InlineJavaProtoc +ol.java:41) at org.perl.inline.java.InlineJavaServer.ProcessCommand(Inline +JavaServer.java:153) at org.perl.inline.java.InlineJavaServer.ProcessCommand(Inline +JavaServer.java:142) at org.perl.inline.java.InlineJavaServerThread.run(InlineJavaS +erverThread.java:51) SQLException: No suitable driver found for jdbc:teradata://172.28.130. +20/TMODE=TERA,DBS_PORT=1025,CHARSET=UTF8,LOGMECH=LDAP,SSLMODE=ALLOW;T +eraDriver=com.teradata.jdbc.TeraDriver

    So, it is almost like it is calling out to the trino driver, not the Teradata driver. How would appropriately register the driver, what is the syntax?