我有一个要求,我需要确定SQL查询的类型并使用JDBC执行它。由于SQL查询将在运行时提供,所以我只想知道是否有任何条件来确定查询是INSERT,UPDATE,DELETE还是SELECT。
目前我通过将起始查询文本与INSERT,UPDATE,DELETE或SELECT进行比较来实现它。
try {
if (querytext.startsWith("insert")
|| querytext.startsWith("INSERT")) {
// insert operation
} else if (querytext.startsWith("update")
|| querytext.startsWith("UPDATE")
|| querytext.startsWith("delete")
|| querytext.startsWith("DELETE")) {
// update operation
} else {
// select operation
}
} catch (SQLException e) {
} catch (Exception e) {
}
答案 0 :(得分:0)
一些供应商支持IF语句。例如,在SQL Server中,您可以执行以下操作:
如果存在(从测试中选择*) 从测试中选择*
或
如果存在(从测试中选择*) 插入测试值(1,2,3)
许多语言也支持以“with”开头的公用表表达式。这可用于插入和更新。 标准SQL支持MERGE语句。其他供应商支持各种类型的更新,如UPSERT,REPLACE,..
答案 1 :(得分:0)
@HyberLink我完全不了解您的要求。至少(更新/删除/插入)或(选择)在某种程度上是可以接受的..但是将所有组合在一起并不是一个好主意。但由于它的要求,很难自己判断好坏。因此,假设您在进行JDBC调用之前需要检查解决方案!那你有两个选择..
String.indexOf()
INSERT
,UPDATE
,DELETE
都可以拥有SELECT
(sub查询?) 。所以它不仅仅是INSERT into <table_name> VALUES(SELECT <fields> from <some_other_table>)
。准备好各种预期的查询,并选择一个明智的选择(所以,如果你没有什么可担心我上面提到的怪物,那么第一选择本身就是一个很好的协议。)