soapui jdbc:java.sql.SQLException:数据类型不匹配。 (2015年2月4日)

时间:2015-02-04 15:30:11

标签: sql jdbc groovy soapui

我需要每天自动使用sql查询来自soap。 对DB的查询具有当前日期。

所以,我这样做了:

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'直接填写日期。

梅德

3 个答案:

答案 0 :(得分:0)

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

select * ...
where SENDDATE = now()

答案 1 :(得分:0)

由于@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

希望这有帮助,

答案 2 :(得分:0)

首先,确保你的mysql字段数据类型是相关的(它应该是&#39; date&#39; not 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 Engine)查询:

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

备注:

  • 您的数据库中的格式将是标准的,如2015-02-05
  • 您可以使用&#39; yyyy / MM / dd HH:mm:ss&#39;等格式。如果你想有时间,那么你的mysql字段数据类型必须是&#39; datetime()&#39;。