在单个语句中用 Java 执行多个查询
当尝试在单个语句中执行多个查询时,JDBC 通常会引发异常, MySQL 查询浏览器中提供的功能。但是,有两种方法可以促进此功能:
方法 1:配置多个查询
在数据库 URL 中将“allowMultiQueries”连接属性设置为“true”启用以分号分隔的多个查询。这应该在连接请求期间指定。
String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
不要使用“executeBatch”,而是使用“execute(String sql)”来检索查询执行结果。迭代结果并使用以下步骤处理它们:
boolean hasMoreResultSets = stmt.execute(multiQuerySqlString); READING_QUERY_RESULTS: while (hasMoreElementsResultSets || stmt.getUpdateCount() != -1) { if (hasMoreElementsResultSets) { ResultSet rs = stmt.getResultSet(); // Handle result set here } else { // DDL/DML operation int queryResult = stmt.getUpdateCount(); if (queryResult == -1) { // No more queries break READING_QUERY_RESULTS; } // Handle success, failure, or generated keys here } hasMoreElementsResultSets = stmt.getMoreResults(); }
方法 2:带游标的存储过程
创建一个执行多个查询的存储过程,包括select 和 DML 语句。使用“CallableStatement”从 Java 调用此过程。这种方法允许您捕获多个结果集。然而,DML结果无法直接捕获。
CallableStatement cstmt = con.prepareCall("call multi_query()"); boolean hasMoreResultSets = cstmt.execute(); READING_QUERY_RESULTS: while (hasMoreElementsResultSets) { ResultSet rs = stmt.getResultSet(); // Handle result set here }
以上是如何在单个 Java 语句中执行多个 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!