SOAPUI & Groovy Scripts, executing multiple SQL statements in one go
문제
I've got some soapUI tests, that use groovy scripts to first insert some data into a table
Previously, I've been using the following snippet of code to do this :
def conn = context.dbConnEtopup
conn.execute( "INSERT INTO A(ID, NAME) VALUES (1, "Johnny")" )
This works fine, however I have many test scripts that now do a similar (if not the same) SQL statements, so I'm trying to approach this by loading it in from a properties file, so my actual SQL statement is only in one place, for easier editing
However, my SQL statement that I'm trying to use is actually 2 inserts(or deletes), so the property being loaded in is :
DELETE * FROM TABLE_A; DELETE * FROM TABLE_B;
conn.execute()
can't handle the ;
, which means I could only use the first DELETE
statement
How can I get around this? I don't want to have to load each property separately and execute them. Ideally I just want one property, so I can add further delete statements in the future
해결책
Couldn't you just store them in the properties file with the semicolons, then remove them after reading them, e.g.
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);
다른 팁
Some JDBC drivers support multiple statements and this functionality will then be available via Groovy's Sql class, e.g. with 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');
"""
Sometimes that's not good enough. Check out my solution: Running multiple SQL statements from Groovy