使用 jdbc 运行 DB2 命令失败
Posted
技术标签:
【中文标题】使用 jdbc 运行 DB2 命令失败【英文标题】:Failed to run the DB2 command using jdbc 【发布时间】:2020-03-21 18:03:43 【问题描述】:尝试使用 jdbc 运行 db2 命令。下面是java代码和异常
从coldel0x09修改的del文件中加载db2到item中 代码:
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;JOIN , 驱动程序=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)
【问题讨论】:
代码不正确。 LOAD 是 Db2-CLP 理解的命令,因此它不是 SQL,因此不能作为 SQL 执行。查找存储过程 ADMIN_CMD ,它只允许您为 Db2-on-Linux/Unix/Windows 执行加载。见ibm.com/support/knowledgecenter/SSEPGG_11.5.0/… 如果您使用的是 Db2 11.5,还可以考虑使用EXTERNAL TABLE
来加载数据。这是一条 SQL 语句,而不是像 LOAD ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/… 这样的命令,它也可以加载远程文件,再次与 LOAD 不同
【参考方案1】:
Error -104 是语法错误,“意外令牌”。您要做的是在 JDBC 环境中执行命令行命令。这不是设计使然。
You may want to look into executing LOAD by calling the ADMIN_CMD procedure。 ADMIN_CMD 允许在没有可用命令行界面的情况下运行管理命令。
【讨论】:
阅读我写的。您不能使用该命令,必须使用 ADMIN_CMD 进行切换。查看链接【参考方案2】:根据data_henkik comment,您的代码应如下所示:
String storedProcedure = "CALL SYSPROC.ADMIN_CMD('load from [insert full load command here]')";
CallableStatement cstm = conn.prepareCall(storedProcedure);
cstm.execute();
【讨论】:
以上是关于使用 jdbc 运行 DB2 命令失败的主要内容,如果未能解决你的问题,请参考以下文章