【问题标题】:Sample Java Program to call Teradata Stored Procedure用于调用 Teradata 存储过程的示例 Java 程序
【发布时间】:2016-06-23 10:26:11
【问题描述】:

我想从 Java 程序中调用 Teradata 存储过程,任何人都可以有示例 java 程序吗?

由于某些限制,我无法在 Teradata 中创建一些 UDF 函数,因此我将这些函数开发为 Teradata 中的存储过程。

现在,我需要使用 Java 程序调用这些过程。

朋友们,这是我的java程序,

public static String executeme(String x,String y) throws SQLException, ClassNotFoundException
 {
     System.out.println(" Message: 2 " );
     String connectionString = "jdbc:teradata://192.168.0.0/xyz,tmode=ANSI,charset=UTF8,DBS_PORT=1025,DATABASE=xyz";
     String user = "xyz";
     String passwd = "xxx";
     System.out.println(" Message: 3 after url " +x );
     String sCall = "{CALL "+x+"(?,?)}";
     System.out.println(" Message: after call str " +sCall );
     String result = null;

     try
     {
         Class.forName("com.teradata.jdbc.TeraDriver");

         Connection con = DriverManager.getConnection(connectionString, user, passwd);  
         System.out.println(" Message: after con "+con  );
         CallableStatement cStmt = con.prepareCall(sCall);
         cStmt.setString(1, y);
         cStmt.registerOutParameter(2, Types.VARCHAR);          
         result = cStmt.getString(2);   

         return result;  


     }       
     catch(ClassNotFoundException e)
     {
         System.out.println(" Message: " + e);
         return e.toString();    
     }



 }
public static void main(String[] args) throws SQLException, ClassNotFoundException {
    // TODO Auto-generated method stub

    String outs=null; 
    System.out.println(" Message: 1 " );
    outs = testing.executeme("sample_name", "ABCD");
     System.out.println(outs);
}

但是,在运行这个程序时,我得到了错误:

Message: 1 
Message: 2 
Message: 3 after url ment_f_swithin
Message: after con com.teradata.jdbc.jdk6.JDK6_SQL_Connection@85ede7b
Exception in thread "main" java.sql.SQLException: [Teradata Database] [TeraJDBC 14.10.00.42] [Error 5510] [SQLState HY000] Invalid session mode for   procedure execution.
at com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDatabaseSQLException  (ErrorFactory.java:308)
at com.teradata.jdbc.jdbc_4.statemachine.ReceiveInitSubState.action(ReceiveInitSubState.java:109)
at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.subStateMachine(StatementReceiveState.java:307)
at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:196)
at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:123)
at com.teradata.jdbc.jdbc_4.statemachine.StatementController.run(StatementController.java:114)
at com.teradata.jdbc.jdbc_4.TDStatement.executeStatement(TDStatement.java:386)
at com.teradata.jdbc.jdbc_4.TDStatement.prepareRequest(TDStatement.java:573)
at com.teradata.jdbc.jdbc_4.TDPreparedStatement.<init>(TDPreparedStatement.java:117)
at com.teradata.jdbc.jdk6.JDK6_SQL_PreparedStatement.<init>(JDK6_SQL_PreparedStatement.java:29)
at com.teradata.jdbc.jdk6.JDK6_SQL_CallableStatement.<init>(JDK6_SQL_CallableStatement.java:23)
at com.teradata.jdbc.jdk6.JDK6_SQL_Connection.constructCallableStatement(JDK6_SQL_Connection.java:87)
at com.teradata.jdbc.jdbc_4.TDSession.prepareCall(TDSession.java:1373)
at com.teradata.jdbc.jdbc_4.TDSession.prepareCall(TDSession.java:1408)
at com.teradata.jdbc.jdbc_4.TDSession.prepareCall(TDSession.java:1394)
at java_func.testing.executeme(testing.java:32)
at java_func.testing.main(testing.java:55)

我尝试使用 ANSI、TERA、BTET 的所有 3 种模式。但我仍然遇到同样的错误,请指导我

【问题讨论】:

标签: java teradata java-stored-procedures


【解决方案1】:
Connection conn1;

<... connect conn1 ...>

conn1.createStatement().execute("call proc_test()");

【讨论】:

    【解决方案2】:

    只是代替这一行:

    String connectionString = "jdbc:teradata://192.168.0.0/xyz,tmode=ANSI,charset=UTF8,DBS_PORT=1025,DATABASE=xyz";
    

    我变成了

    String connectionString = "jdbc:teradata://192.168.0.0/tmode=ANSI,charset=UTF8";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2019-10-04
      • 2020-11-15
      • 1970-01-01
      • 2021-02-11
      • 2013-05-18
      相关资源
      最近更新 更多