我正在开发一个简单的项目,它从用户那里获取sql查询并在JTable中显示结果
我想确定是否输入了select语句或输入了任何其他DML / DDL语句,因此我可以相应地调用executeQuery()
或executeUpdate()
。
我想过检查查询是否以select开头。有一个更好的方法吗。
答案 0 :(得分:2)
您可以只使用executeQuery
而不是尝试决定是否需要拨打executeUpdate
或execute
。
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
则不是。)