Teradata外部Java存储过程错误:找不到适合jdbc的驱动程序:default:connection

时间:2016-03-21 13:20:51

标签: java stored-procedures jdbc teradata connectivity

我编写了一个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[])';

现在,当我调用此过程时,收到此错误消息:

  

作为单一陈述执行。失败[7827:39001] Java SQL异常SQLSTATE 39001:无效的SQL状态(08001:找不到适合jdbc的驱动程序:default:connection)。

现在,当我从Teradata注销并再次登录并调用该过程时,错误消息变为:

  

作为单一陈述执行。失败[7827:39001]尚未为此线程建立Java存储过程的默认连接。)。

这是什么问题?我使用Eclipse插件连接到Teradata。 Teradata v.15.0.1.01。

1 个答案:

答案 0 :(得分:0)

几个小时后我终于找到了问题。 Eclipse将所有依赖项打包到jar中 - 基本上没问题。但是它还将Teradata JDBC驱动程序文件(tdgssconfig.jar和terajdbc4.jar)打包到结果jar中,这就是问题所在。

我调整了jar构建过程,以便不包含这些文件,并且错误消失了。