java - 替换 SQL 字符串中的时间戳占位符

标签 java sql

这是场景:

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

SELECT ID, NAME FROM MYTABLE WHERE DATE = &Date

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

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

问题出在我尝试更换它时。如果我将其替换为 timeStamp.toString() [这不是正确的方法,只是为了测试我所做的],它会被替换,但我的查询变得无效,并且我收到 SQL 异常(ORA-01861:文字与格式字符串不匹配)。

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

约束

  1. 我无法使用 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/

相关文章:

java - java中的条件if-else语句

javascript - 如何使用 jQuery 将多个文件上传到 java Controller

MySql更新查询

SQL 服务器 : Find Values that don't exist in a table

sql - SQL 透视多列

java - 如何在 Java 中访问 Arraylist 中的 Object[] 中的值

java - 使用swing在java中计算和打印时间

Java 用变量文本替换字符串

MYSQL使用Order by排序

mysql - 多个子查询,一个返回多于1行