如何确定用户在java

时间:2015-06-17 04:58:34

标签: java mysql jdbc

我正在开发一个简单的项目,它从用户那里获取sql查询并在JTable中显示结果 我想确定是否输入了select语句或输入了任何其他DML / DDL语句,因此我可以相应地调用executeQuery()executeUpdate()。 我想过检查查询是否以select开头。有一个更好的方法吗。 enter image description here

1 个答案:

答案 0 :(得分:2)

您可以只使用executeQuery而不是尝试决定是否需要拨打executeUpdateexecute

Statement.execute(String)的javadoc说:

  

执行给定的SQL语句,该语句可能返回多个结果。在某些(不常见的)情况下,单个SQL语句可能返回多个结果集和/或更新计数。通常,您可以忽略此操作,除非您(1)执行您知道可能返回多个结果的存储过程或(2)您正在动态执行未知的SQL字符串。

(强调我的)

execute方法有一个布尔返回值,表示:

  • false:第一个结果是更新计数,或者没有结果
  • true:第一个结果是结果集

我故意说第一个结果,因为JDBC允许单个语句具有多个结果(例如,SQL Server存储过程可以返回多个结果集并以任何顺序更新计数)。

如果false,您需要致电getUpdateCount。这将返回更新计数(0或更高)或-1以指示不再有结果。另外:如果结果为getUpdateCount,则调用true也应返回-1

如果true,您需要致电getResultSet以获取结果集。

要处理更多结果(即如果您刚刚处理了结果集或getUpdateCount不是-1),那么您调用getMoreResults,它也返回一个布尔值,完全相同的含义,等等。

这听起来很复杂,但大多数数据库只支持单个结果集,如果您只关心结果集,那么您只需要检查execute是否返回true然后使用{{ 1}}(如果是getResultset则不是。)