Maison >Java >javaDidacticiel >Comment puis-je exécuter plusieurs requêtes SQL dans une seule instruction Java ?

Comment puis-je exécuter plusieurs requêtes SQL dans une seule instruction Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 09:50:13660parcourir

How Can I Execute Multiple SQL Queries in a Single Java Statement?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn