2010-06-11 7 views
3

J'ai quelques tests SoapUI, qui utilisent des scripts Groovy d'abord insérer des données dans une tableScripts SoapUI & Groovy, l'exécution de plusieurs instructions SQL en une seule

Auparavant, je me sers de l'extrait suivant de code pour ce faire:

 def conn = context.dbConnEtopup 
     conn.execute("INSERT INTO A(ID, NAME) VALUES (1, "Johnny")") 

cela fonctionne bien, mais j'ai beaucoup de scripts de test qui font maintenant un semblable (sinon les mêmes) des instructions SQL, donc je suis en train d'aborder ce en le chargeant depuis un fichier de propriétés, donc mon instruction SQL réelle est seulement dans un seul endroit, pour faciliter l'édition

Cependant, mon instruction SQL que je suis en train d'utiliser est en fait 2 inserts (ou supprime), de sorte que la propriété en cours de chargement dans est:

DELETE * FROM TABLE_A; DELETE * FROM TABLE_B; 

conn.execute() ne peut pas gérer le ;, ce qui signifie que je pouvais seulement utiliser la première déclaration DELETE

Comment puis-je contourner ce problème? Je ne veux pas avoir à charger chaque propriété séparément et à les exécuter. Idéalement, je veux juste une propriété, donc je peux ajouter d'autres suppressions à l'avenir

Répondre

3

Ne pourriez-vous pas simplement les stocker dans le fichier de propriétés avec les points-virgules, puis les supprimer après les avoir lus, par ex.

String sqlProperty = // read SQL property from file 
def statements = sqlProperty.split(";") 

// Execute each statment using conn (an instance of groov.sql.Sql?) 
statements.each { conn.execute(it); 
+0

Cela ne fonctionnerait pas si vous avez des points-virgules en tant que données dans un champ de texte. – hfm

5

Certains pilotes JDBC prennent en charge plusieurs instructions et cette fonctionnalité sera alors disponible via la classe Sql de Groovy, par ex. avec MySql:

def props = [user: 'myuser', password: 'mypassword', allowMultiQueries: 'true'] as Properties 
def url = 'jdbc:mysql://127.0.0.1:3306/mydb' 
def driver = 'com.mysql.jdbc.Driver' 
def sql = Sql.newInstance(url, props, driver) 
sql.execute """ 
    insert into PERSON (id, firstname, lastname) values (1, 'Dierk', 'Koenig'); 
    insert into PERSON (id, firstname, lastname) values (2, 'Guillaume', 'Laforge'); 
    insert into PERSON (id, firstname, lastname) values (3, 'Jon', 'Skeet'); 
""" 
Questions connexes