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
Libérer: 2024-12-21 09:50:13
original
618 Les gens l'ont consulté

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";
Copier après la connexion

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();
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal