无法使用jdbc运行DB2命令

问题描述 投票:0回答:2

尝试使用jdbc运行db2命令。下面是java代码和异常

[由Coldel0x09插入项目的del的文件中的db2加载代码:

           Connection conn = getConnectionFromDB(); // Connection object
           Statement stmt = conn.createStatement(); //Statement object
           sql = "db2 load from filepath of del modified by coldel0x09 insert into tablename";//command
           System.out.println("Executing command: "+ sql);
           stmt.execute(sql);
       } catch (SQLException e) {
           throw new RuntimeException("Error loading into table '" + tableName + "' with SQL: " + sql, e);
       }
   }

运行命令后获取异常:

原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL错误:SQLCODE = -104,SQLSTATE = 42601,SQLERRMC = load; db2;加入,驱动程序= 4.9.78在com.ibm.db2.jcc.am.fd.a(fd.java:676)在com.ibm.db2.jcc.am.fd.a(fd.java:60)在com.ibm.db2.jcc.am.fd.a(fd.java:127)在com.ibm.db2.jcc.am.en.c(en.java:2553)在com.ibm.db2.jcc.am.en.d(en.java:2541)在com.ibm.db2.jcc.am.en.b(en.java:1957)在com.ibm.db2.jcc.t4.cb.h(cb.java:221)在com.ibm.db2.jcc.t4.cb.b(cb.java:47)在com.ibm.db2.jcc.t4.q.b(q.java:38)在com.ibm.db2.jcc.t4.rb.h(rb.java:114)在com.ibm.db2.jcc.am.en.hb(en.java:1952)在com.ibm.db2.jcc.am.en.a(en.java:3040)在com.ibm.db2.jcc.am.en.e(en.java:1028)在com.ibm.db2.jcc.am.en.execute(en.java:1012)

java jdbc db2
2个回答
0
投票

Error -104是语法错误,“意外令牌”。您想要做的是在JDBC环境中执行命令行命令。这并非设计使然。

You may want to look into executing LOAD by calling the ADMIN_CMD procedureADMIN_CMD允许运行管理命令,而无需使用命令行界面。


0
投票

您的SQL命令看起来不正确。

[请确保您的“文件名|远程文件名|管道名|设备”实际上是“文件路径”,表名是“表名”(即,您的架构中有一个表,其名称实际上是“表名”)。

由子句修改似乎也不正确。它似乎不符合任何有效值:https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008305.html?view=kc#r0008305__d106e3788

根据您的要求考虑使用适当的值。

[请注意,有不同版本的DB2(z / OS,iSeries,LUW等),值得一提的是您要连接到哪个版本。

根据data_henkik comment,您的代码应类似于:

  String storedProcedure = "CALL SYSPROC.ADMIN_CMD('load from [insert full load command here]')";
  CallableStatement cstm = conn.prepareCall(storedProcedure);
  cstm.execute();
© www.soinside.com 2019 - 2024. All rights reserved.