在SQL字符串中替换Timestamp占位符

时间:2014-10-16 03:58:46

标签: java sql

以下是该方案:

我有一个示例SQL查询,如:

SELECT ID, NAME FROM MYTABLE WHERE DATE = &Date

我想在运行时根据特定条件替换此&Date。所以我有一个实用程序类,它提供实际的Timestamp

Timestamp timeStamp = Util.getTimeStamp("16102014 03:40:06")

问题在于我正在尝试更换它。如果我将它替换为timeStamp.toString()[不是正确的方法,只是为了我做的测试],它被替换但我的查询变为无效,我得到SQL异常(ORA-01861: literal does not match format string)。 / p>

我想要实现的是我想用占位符值替换占位符并执行查询。

约束

  1. 我无法使用PreparedStatement设置值,因为查询可以是任何仲裁查询,而且我没有关于该条款的先验信息。
  2. 感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

由于我们在“字符串”中,这是一个“字符串”解决方案:

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\""

答案 1 :(得分:1)

我认为应该是这样的

SELECT ID, NAME 
  FROM MYTABLE 
 WHERE DATE = TO_TIMESTAMP(&Date, 'yyyy-mm-dd hh:mm:ss.fffffffff')