我有一些与Oracle数据库进行交互的Java代码,并将其转换为与SQL Server一起使用。
代码是:
String parameterisedSQL = "INSERT INTO T(a,b) VALUES (?,?)";
try (Connection con = DriverManager.getConnection(connectionString, databaseUser, databasePassword);
PreparedStatement stmt = con.prepareStatement(parameterisedSQL);)
{
stmt.setString(0,"test");
stmt.setString(1,"CONVERT(DATE, '20201230', 112)");
stmt.executeUpdate();
return true;
}
显然,当它是Oracle代码时,代码读取 stmt.setString(1,"TO_DATE('20201230','YYYYMMDD')");
针对Oracle数据库的Oracle代码工作正常,但是现在我针对SQL Server数据库运行SQL Server代码,但出现异常
从字符串转换日期和/或时间时转换失败
据此,我假设SQL Server无法正确地将CONVERT解析为参数。有什么办法可以做到这一点?(我的代码实际上比显示的代码更具通用性,因此很难使用.setDate
等)。
@forpas提供了详细的答案。
此外,根据您的情况,在插入表之前,无需转换短日期格式(ISO8601)。您可以直接插入。
ISO 8601说明YYYY-MM-DD
YYYYMMDD与SQL标准相同。该格式是唯一定义为国际标准的格式。
declare @TABLE table(T date)
insert into @TABLE (T) VALUES('20201230')
SELECT * FROM @table
对于你的情况
stmt.setString(0,"test");
stmt.setString(1,"20201230");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句