尝试使用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)
Error -104是语法错误,“意外令牌”。您想要做的是在JDBC环境中执行命令行命令。这并非设计使然。
You may want to look into executing LOAD by calling the ADMIN_CMD procedure。 ADMIN_CMD允许运行管理命令,而无需使用命令行界面。
您的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();