以下是该方案:
我有一个示例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>
我想要实现的是我想用占位符值替换占位符并执行查询。
约束
PreparedStatement
设置值,因为查询可以是任何仲裁查询,而且我没有关于该条款的先验信息。感谢任何帮助。
答案 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')