我是java世界的新手并且正在尝试学习,我正在尝试将具有几个参数的存储过程作为参数传递给通过shell脚本执行的java程序,不会看到存储过程被执行。
另外,我有一个工作程序,它执行没有参数的存储过程。以下是代码片段
将存储过程存储为如下所示的参数:
String StProcNme = args[0];
以下是执行存储过程的代码:
stmt = con.createStatement();
rs = stmt.executeQuery("{call " +StProcNme+"}" );
在这种情况下,传递给shellscript的存储过程值为TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test
,这是有效的。
当我尝试使用存储过程值TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test('TEST_MMTS_ABCXYZ','N')
运行上面的代码时,它不起作用,我看到参数的引号在程序中被丢弃。
我正在使用JDK 6 - 感谢任何帮助。
答案 0 :(得分:0)
试图在注释中执行此操作,但是...
String sqlString = args[0];
String query = "{ call " + sqlString + " }";
CallableStatement spStmt = dbConn.prepareCall(query);
for(int i = 1; i < args.length; i++) {
spStmt.setObject(i+2, args[i]); // need to lookup the positioning, off the top of my head here
}
spStmt.execute();
脚本的参数如下所示:
myScript TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test(?,?) TEST_MMTS_ABCXYZ N
您唯一需要引用的时间是是否有不连续的字符串传递到shell脚本中
myScript TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test(?,?) "Hello World" N
*已编辑以添加Shell脚本*
如果您只是想得到自己正在工作的内容,则可以创建一个脚本,告诉它传递原始命令行参数。
cmdTest bash脚本:
printf "Running Command:"
printf " %q" java CMDTest "$@"
printf "\n"
java CMDTest "$@"
使用小型Java程序进行测试,您将获得:
./cmdTest "TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test('TEST_MMTS_ABCXYZ','N')"
输出:
Running Command: java CMDTest TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test\(\'TEST_MMTS_ABCXYZ\'\,\'N\'\)
Arg: 0 TESTDB.TESTDB.Test_xyzz_abc_method.xxxx_req_xyz_some_test('TEST_MMTS_ABCXYZ','N')
Java代码的完整性
public class CMDTest {
public static void main(String[] args) {
for(int i = 0; i < args.length; i++) {
System.out.println("Arg: " + i + "\t " + args[i]);
}
}
}