将SET语句与正常语句组合在一起

时间:2016-04-13 13:10:05

标签: java mysql sql jdbc

我试图创建一个在数据库上运行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。

1 个答案:

答案 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?
}