soapui jdbc: java.sql.SQLException: 数据类型不匹配。 (2015-02-04)

soapui jdbc: java.sql.SQLException: Data type mismatch. (2015-02-04)

我需要每天使用 sql 从 soap 自动查询数据库。 查询数据库有当前日期。

所以,我执行以下操作:

1) 我将当前日期设置为具有 groovy:

的属性
def dateTime= new Date()    
setProperty.setPropertyValue('currDate', String.format("%tF", dateTime, new Date()))

2) 在 jdbc 请求中我做了相应的 属性,并尝试在查询中使用它:

select * ...
where SENDDATE = :Date

但是尝试执行查询会导致数据类型不匹配。

2015-02-04 17:17:54 - Error getting response; java.sql.SQLException: Data type mismatch. (2015-02-04)

所以,我的问题是:在这种情况下如何避免不匹配?

注意:使用“2015-02-02”直接填充日期的查询工作正常。

德米特里

您可以使用 SQL 来计算日期,然后它将始终采用正确的格式:

select * ...
where SENDDATE = now()

正如@SiKing 建议您可以使用 SQL 函数,请注意,如果您使用的是 sqlserver 而不是 now(),则必须使用 GETDATE():

select * ...
where SENDDATE = GETDATE()

无论如何,如果你想使用你的参数而不是函数,有时似乎字符串不能作为日期,你可以尝试使用格式函数将字符串转换为日期,因为我不清楚数据库是什么你用我给你看以下案例:

甲骨文

select * ...
where SENDDATE = TO_DATE(:Date, 'yyyy-mm-dd')

mySql

select * ...
where SENDDATE = STR_TO_DATE(:Date, '%Y-%m-%d')

sqlserver

select * ...
where SENDDATE = CONVERT(DATETIME,:Date,20)

sqlserver 的情况不太直观,20 是 yyyy-mm-dd hh:mi:ss 的格式,所以我不太确定您是否可以转换 2015-02-04 也许您必须附加 hh:mi:ss在你的 groovy 作为 2015-02-04 00:00:00

希望这对您有所帮助,

首先,确保您的 mysql 字段数据类型是相关的(应该是 'date' 而不是 time()、text、varchar 等)

关于groovy格式化方式,如下:

import groovy.time.*
def dateTime= new Date().format('yyyy/MM/dd') 
testRunner.testCase.testSteps["Properties"].setPropertyValue('currDate',dateTime.toString())

JDBC(mysql引擎)查询:

select * ... 
where SENDDATE = '${Properties#currDate}'

备注:

  • 您的数据库中的格式将是标准格式,如 2015-02-05
  • 如果你也想有时间,你可以使用 'yyyy/MM/dd HH:mm:ss' 这样的格式,在这种情况下,你的 mysql 字段数据类型必须是 'datetime()'.