Teradata external Java Stored Procedure error: No suitable driver found for jdbc:default:connection
Teradata external Java Stored Procedure error: No suitable driver found for jdbc:default:connection
我写了一个Java存储过程,打包成jar安装到Teradata数据库中。我想使用 here 中描述的默认数据库连接。大多数代码是由 Teradata 向导为存储过程生成的。
public class TestSql {
public static void getEntryById(int id, String[] resultStrings) throws SQLException {
Connection con = DriverManager.getConnection("jdbc:default:connection");
String sql = "SELECT x FROM TEST_TABLE WHERE ID = " + id + ";";
Statement stmt = (Statement) con.createStatement();
ResultSet rs1 = ((java.sql.Statement) stmt).executeQuery(sql);
rs1.next();
String resultString = rs1.getString(1);
stmt.close();
con.close();
resultStrings[0] = resultString;
}
}
我安装了 jar:
CALL SQLJ.REPLACE_JAR('CJ!/my/path/Teradata-SqlTest.jar','test');
并创建程序:
REPLACE PROCEDURE "db"."getEntryById" (
IN "id" INTEGER,
OUT "resultString" VARCHAR(1024))
LANGUAGE JAVA
MODIFIES SQL DATA
PARAMETER STYLE JAVA
EXTERNAL NAME 'test:my.package.TestSql.getEntryById(int,java.lang.String[])';
现在,当我调用此过程时,我收到此错误消息:
Executed as Single statement. Failed [7827 : 39001] Java SQL Exception SQLSTATE 39001: Invalid SQL state (08001: No suitable driver found for jdbc:default:connection).
现在,当我从 Teradata 注销并再次登录并调用该过程时,错误消息变为:
Executed as Single statement. Failed [7827 : 39001] A default connection for a Java Stored Procedure has not been established for this thread.).
这里有什么问题?我正在使用 Eclipse 插件连接到 Teradata。 Teradata v. 15.0.1.01.
经过几个小时,我终于找到了问题所在。 Eclipse 将所有依赖项打包到 jar 中——这基本上没问题。然而,它还将 Teradata JDBC 驱动程序文件(tdgssconfig.jar 和 terajdbc4.jar)打包到结果 jar 中,这就是问题所在。
我调整了 jar 构建过程,因此不包含这些文件并且错误消失了。
我写了一个Java存储过程,打包成jar安装到Teradata数据库中。我想使用 here 中描述的默认数据库连接。大多数代码是由 Teradata 向导为存储过程生成的。
public class TestSql {
public static void getEntryById(int id, String[] resultStrings) throws SQLException {
Connection con = DriverManager.getConnection("jdbc:default:connection");
String sql = "SELECT x FROM TEST_TABLE WHERE ID = " + id + ";";
Statement stmt = (Statement) con.createStatement();
ResultSet rs1 = ((java.sql.Statement) stmt).executeQuery(sql);
rs1.next();
String resultString = rs1.getString(1);
stmt.close();
con.close();
resultStrings[0] = resultString;
}
}
我安装了 jar:
CALL SQLJ.REPLACE_JAR('CJ!/my/path/Teradata-SqlTest.jar','test');
并创建程序:
REPLACE PROCEDURE "db"."getEntryById" (
IN "id" INTEGER,
OUT "resultString" VARCHAR(1024))
LANGUAGE JAVA
MODIFIES SQL DATA
PARAMETER STYLE JAVA
EXTERNAL NAME 'test:my.package.TestSql.getEntryById(int,java.lang.String[])';
现在,当我调用此过程时,我收到此错误消息:
Executed as Single statement. Failed [7827 : 39001] Java SQL Exception SQLSTATE 39001: Invalid SQL state (08001: No suitable driver found for jdbc:default:connection).
现在,当我从 Teradata 注销并再次登录并调用该过程时,错误消息变为:
Executed as Single statement. Failed [7827 : 39001] A default connection for a Java Stored Procedure has not been established for this thread.).
这里有什么问题?我正在使用 Eclipse 插件连接到 Teradata。 Teradata v. 15.0.1.01.
经过几个小时,我终于找到了问题所在。 Eclipse 将所有依赖项打包到 jar 中——这基本上没问题。然而,它还将 Teradata JDBC 驱动程序文件(tdgssconfig.jar 和 terajdbc4.jar)打包到结果 jar 中,这就是问题所在。
我调整了 jar 构建过程,因此不包含这些文件并且错误消失了。