识别SQL查询

时间:2014-12-12 09:27:14

标签: java sql

我有一个要求,我需要确定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) {

            }

2 个答案:

答案 0 :(得分:0)

一些供应商支持IF语句。例如,在SQL Server中,您可以执行以下操作:

如果存在(从测试中选择*) 从测试中选择*

如果存在(从测试中选择*) 插入测试值(1,2,3)

许多语言也支持以“with”开头的公用表表达式。这可用于插入和更新。 标准SQL支持MERGE语句。其他供应商支持各种类型的更新,如UPSERT,REPLACE,..

答案 1 :(得分:0)

@HyberLink我完全不了解您的要求。至少(更新/删除/插入)或(选择)在某种程度上是可以接受的..但是将所有组合在一起并不是一个好主意。但由于它的要求,很难自己判断好坏。因此,假设您在进行JDBC调用之前需要检查解决方案!那你有两个选择..

  • 使用String.indexOf()
  • 不要使用第一个,因为有时甚至INSERTUPDATEDELETE都可以拥有SELECT (sub查询?) 。所以它不仅仅是INSERT into <table_name> VALUES(SELECT <fields> from <some_other_table>)。准备好各种预期的查询,并选择一个明智的选择(所以,如果你没有什么可担心我上面提到的怪物,那么第一选择本身就是一个很好的协议。)