2017-02-28 2 views
1

EDIT: la réponse liée n'utilise pas LAST_INSERT_ID, toujours à la recherche de réponse. J'utilise JBoss et j'obtiens des connexions via DataSource (JNDI).Chaîne instructions MySQL sous JBoss

Comment puis-je enchaîner et exécuter plusieurs instructions SQL en une seule fois, où la deuxième instruction dépend de la sortie du premier (LAST_INSERT_ID())

preparedStatement = connection.prepareStatement("INSERT INTO product(name) VALUES(?); INSERT INTO brand_product(brand_id, product_id) VALUES(?, LAST_INSERT_ID())", Statement.RETURN_GENERATED_KEYS); 
preparedStatement.setString(1, name); 
preparedStatement.setInt(2, brandId); 

if(preparedStatement.executeUpdate() != 0) { 
    try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) { 
     if(generatedKeys.next()) { 
      product = new Product(generatedKeys.getInt(1), name); 
     } 
    } 
}; 

S'il vous plaît noter: J'ai produit clés utilisés aussi bien , la deuxième table ne génère aucune clé car c'est une table de jointure.

+0

il est pas double emploi, ma question utilise 'LAST_INSERT_ID' – user2727195

+0

double possible de [MySQL ConnectorJ avec plusieurs instructions SQL] (http://stackoverflow.com/questions/9219552/mysql-connectorj-with-multiple-sql -statements) –

+0

@GordThompson le lien dans la réponse est brisé, pouvez-vous s'il vous plaît lier la page ici, j'utilise JBOSS, et la connexion via la source de données, JNDI – user2727195

Répondre

1
  1. Configurez JBoss pour autoriser plusieurs requêtes dans l'interface d'administration. Cliquez sur désactiver avant d'ajouter des propriétés. (sous DataSources).

    propertyName: allowMultiQueries valeur de la propriété: true

  2. Les clés générées seront pas un problème puisque la deuxième requête n'a pas incrémenter automatique des clés primaires.