我试图创建一个在数据库上运行mySQL查询/语句的工具。 我遇到的问题是这些查询/语句是一个自由格式的文本,如文本框 - 我也使用它们与专业的SQL程序。 举一个例子,它将是:
#Example of a query statement
@SET fName = "John"
SELECT * FROM Person WHERE Person.firstName = fName
#Example of an execute statement
@SET fName = "John"
DELETE FROM Person WHERE Person.firstName = fName
正如您所看到的,查询/语句可能包含注释,SET语句,然后是execute语句或select查询。此外,它们可能并不总是格式正确,因此在东西或标签或空格之间可能会有空行。
我知道PreparedStatements的选项,但是虽然这样可行,但它并不适合整个查询/语句可以编辑为自由格式文本。 我的问题是如何通过Java执行这些语句/查询? executeBatch适用于第二个示例,但不是第一个示例,因为它返回ResultSet。
答案 0 :(得分:0)
解决方案是使用Statement.execute()而不是一个更具体的函数,如.executeUpdate()或.executeQuery()甚至.executeBatch()
函数.execute()返回一个布尔值,表示是否有结果返回或者是否有更多结果可以获得。
public void executeAll(String queryString) throws SQLException {
boolean hasMoreResults = statement.execute(queryString);
int updateCount = statement.getUpdateCount();
while(hasMoreResults || (!hasMoreResults && updateCount != -1)){
//.execute() can be false if a query is not returned as when using a SET/ UPDATE/ DELETE which is why we check if updateCount is -1 meaning there are no more statements returned
if(hasMoreResults){
resultSet = statement.getResultSet();
//Do what you need to do with the ResultSet
} else {
//Else it's a UPDATE/ DELETE count - int
//Do what you need to do with the updateCount
}
hasMoreResults = statement.getMoreResults();
updateCount = statement.getUpdateCount();
//New values for the next cycle
}
//Possibly return stuff?
}