문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top