这是场景:
我有一个示例 SQL 查询,例如:
SELECT ID, NAME FROM MYTABLE WHERE DATE = &Date
我想根据某些条件在运行时替换此&Date
。所以我有一个实用程序类,它提供实际的时间戳。
Timestamp timeStamp = Util.getTimeStamp("16102014 03:40:06")
问题出在我尝试更换它时。如果我将其替换为 timeStamp.toString() [这不是正确的方法,只是为了测试我所做的],它会被替换,但我的查询变得无效,并且我收到 SQL 异常(ORA-01861:文字与格式字符串不匹配
)。
我想要实现的是我想用时间戳值替换占位符并执行查询。
约束
- 我无法使用
PreparedStatement
设置值,因为查询可以是任何任意查询,并且我没有有关该子句的事先信息。
感谢任何帮助。
最佳答案
由于我们处于“String”领域,因此这是一个“String”解决方案:
Timestamp timeStamp = Util.getTimeStamp("16102014 03:40:06")
SimpleDateFormat format = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss''");
String formattedDate = format.format(timeStamp);
sql = sql.replace("&Date", formattedDate);
注意:日期格式中的双 ''
表示在输出中生成一个单引号(单引号是日期格式中文字文本的分隔符) .
另请注意,由于您没有使用驱动程序,因此用于引用文本的字符取决于数据库。此解决方案假设单引号可用于引用文字,但如果您的数据库需要双引号 "
,则格式应为 "\"yyyy-MM-dd HH:mm :ss\""
,
关于java - 替换 SQL 字符串中的时间戳占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396010/