如何通过命令 Line/Batch Args[] 将所有类型的 SQL-查询传递到 Java?
How to pass all kind of SQL-Queries via Command Line/Batch Args[] into Java?
我想写一个小的 .jar,用作 SQL 的“翻译器”- 定向到 z/OS-DB2-Database 的查询。
我的目标是应用程序接受 SQL-查询作为命令行参数,手动或通过 shell script/cron,在 IP、端口、用户等其他参数旁边
有没有办法在将这些参数传递给 jar 时不受影响?
示例:
java -jar db2sql.jar SQL=={SELECT * FROM TABLE1 TAB1, TABLE2 TAB2 WHERE TAB1.XYZ = TAB2.ZYX AND TAB2.ABC LIKE 'blabla' AND TAB1.DATE >= '01.01.2015'} IP=={192.168.0.1} User=={Santa} Password=={CLAUS}
(请忽略这句话毫无意义,但我希望你能领会)
我的问题是读出命令行参数,主要是特殊字符,如 * 、" ' 等
问题:
- 是否有所有可能的 SQL-必须转义的参数的列表?
- 是否有一个特殊字符可以用作永远不会出现在 SQL-查询中的分隔符?
- 是否可以将所有类型的 SQL 语句作为一个参数传递?
- 是否可以不处理特殊字符,例如参数“”= 字符串“”,而不是 .classpath 等?
亲切的问候
尽管出于多种原因我不推荐您尝试执行的操作,但至少在 *NIX 环境中您可以使用标准方式。
java -jar foo.jar -s "SELECT * FROM SOMETHING WHERE foo = 2" -u username -h hostname
您可以使用额外的库来解析参数,但这样您将使用 -s
来指定 SQL 查询,并将参数值包装在 "
中以使其成为具有自动转义的单个参数。
在您的主要方法中,您可以使用(简化)
获得完整的查询
if(args[0].equals("-s"))
sqlString = args[1];
我想写一个小的 .jar,用作 SQL 的“翻译器”- 定向到 z/OS-DB2-Database 的查询。 我的目标是应用程序接受 SQL-查询作为命令行参数,手动或通过 shell script/cron,在 IP、端口、用户等其他参数旁边
有没有办法在将这些参数传递给 jar 时不受影响?
示例:
java -jar db2sql.jar SQL=={SELECT * FROM TABLE1 TAB1, TABLE2 TAB2 WHERE TAB1.XYZ = TAB2.ZYX AND TAB2.ABC LIKE 'blabla' AND TAB1.DATE >= '01.01.2015'} IP=={192.168.0.1} User=={Santa} Password=={CLAUS}
(请忽略这句话毫无意义,但我希望你能领会)
我的问题是读出命令行参数,主要是特殊字符,如 * 、" ' 等
问题:
- 是否有所有可能的 SQL-必须转义的参数的列表?
- 是否有一个特殊字符可以用作永远不会出现在 SQL-查询中的分隔符?
- 是否可以将所有类型的 SQL 语句作为一个参数传递?
- 是否可以不处理特殊字符,例如参数“”= 字符串“”,而不是 .classpath 等?
亲切的问候
尽管出于多种原因我不推荐您尝试执行的操作,但至少在 *NIX 环境中您可以使用标准方式。
java -jar foo.jar -s "SELECT * FROM SOMETHING WHERE foo = 2" -u username -h hostname
您可以使用额外的库来解析参数,但这样您将使用 -s
来指定 SQL 查询,并将参数值包装在 "
中以使其成为具有自动转义的单个参数。
在您的主要方法中,您可以使用(简化)
获得完整的查询if(args[0].equals("-s"))
sqlString = args[1];