3

我有一些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()can't handle the ;,这意味着我只能使用第一DELETE条语句

我怎样才能解决这个问题?我不想单独加载每个属性并执行它们。理想情况下,我只想要一个属性,因此我可以在将来添加更多删除语句

4

3 回答 3

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');
"""
于 2010-11-28T01:22:01.830 回答
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);
于 2010-06-11T16:55:00.913 回答
1

有时这还不够好。查看我的解决方案:从 Groovy 运行多个 SQL 语句

于 2010-11-27T09:32:55.600 回答