Maison >Java >javaDidacticiel >Comment puis-je exécuter plusieurs requêtes SQL dans une seule instruction Java ?
Exécution de plusieurs requêtes en Java dans une seule instruction
JDBC lève généralement une exception lors de la tentative d'exécution de plusieurs requêtes dans une seule instruction, un fonctionnalité disponible dans le navigateur de requêtes de MySQL. Cependant, il existe deux approches qui facilitent cette fonctionnalité :
Approche 1 : configuration de plusieurs requêtes
Définissez la propriété de connexion "allowMultiQueries" sur "true" dans l'URL de la base de données. pour activer plusieurs requêtes séparées par des points-virgules. Cela doit être spécifié lors de la demande de connexion.
String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
Au lieu d'utiliser "executeBatch", utilisez "execute(String sql)" pour récupérer les résultats de l'exécution de la requête. Parcourez les résultats et traitez-les en suivant les étapes suivantes :
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(); }
Approche 2 : procédures stockées avec des curseurs
Créez une procédure stockée qui exécute plusieurs requêtes, notamment instructions select et DML. Appelez cette procédure depuis Java en utilisant "CallableStatement". Cette approche vous permet de capturer plusieurs ResultSets. Cependant, les résultats DML ne peuvent pas être capturés directement.
CallableStatement cstmt = con.prepareCall("call multi_query()"); boolean hasMoreResultSets = cstmt.execute(); READING_QUERY_RESULTS: while (hasMoreElementsResultSets) { ResultSet rs = stmt.getResultSet(); // Handle result set here }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!