我有一些soapUI测试,使用groovy脚本首先将一些数据插入表中
以前,我一直在使用以下代码片段来执行此操作:
def conn = context.dbConnEtopup
conn.execute( "INSERT INTO A(ID, NAME) VALUES (1, "Johnny")" )
这很好用,但是我有很多测试脚本现在做类似的(如果不是相同的)SQL语句,所以我试图通过从属性文件中加载它来解决这个问题,所以我的实际SQL语句是只在一个地方,以便于编辑
但是,我尝试使用的SQL语句实际上是2个插入(或删除),因此加载的属性是:
DELETE * FROM TABLE_A; DELETE * FROM TABLE_B;
conn.execute()
无法处理;
,这意味着我只能使用第一个DELETE
语句
我该如何解决这个问题?我不想分别加载每个属性并执行它们。理想情况下,我只想要一个属性,所以我可以在将来添加更多删除语句
答案 0 :(得分:5)
某些JDBC驱动程序支持多个语句,然后可以通过Groovy的Sql类获得此功能,例如:使用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');
"""
答案 1 :(得分:3)
你不能只用分号将它们存储在属性文件中,然后在读取它们后将它们删除,例如。
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);
答案 2 :(得分:1)
有时这还不够好。查看我的解决方案:Running multiple SQL statements from Groovy