【问题标题】:String value to PrepareStatement for TimeStamp comparasion为时间戳比较准备语句的字符串值
【发布时间】:2018-07-21 23:17:04
【问题描述】:

使用 TimeStamp 的 WHERE 子句从表中选择数据。 我想设置一个从 TextField 检索的字符串值来显示过滤表。

不工作:

public ResultSet queryAlarms() throws SQLException
String sql = "SELECT * FROM BDCS.dbo.Alarms WHERE AlarmTime > ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, " '2017-12-29 14:45' ");
return ps.executeQuery();
}

工作:

public ResultSet queryAlarms() throws SQLException {
String sql = "SELECT * FROM BDCS.dbo.Alarms WHERE AlarmTime > '2017-12-29 14:45'";
PreparedStatement ps = connection.prepareStatement(sql);
return ps.executeQuery();
}

有人知道如何正确发送值吗?或者有什么更好的方法?

【问题讨论】:

  • 而不是 StringLocalDateTimeInstant 传递给查询。 ps.setObject(1, myLocalDateTime); 或类似的瞬间。

标签: java sql-server jdbc timestamp


【解决方案1】:

试试这个..!

preparedStatement.setTimestamp(1,getCurrentTimeStamp());

您也可以使用文本字段字符串来生成时间戳。

private static java.sql.Timestamp getCurrentTimeStamp() {

    java.util.Date today = new java.util.Date();
    return new java.sql.Timestamp(today.getTime());

}


private static Timestamp getTimeStamp(String ts){

 //Change the format as per your requirement
  DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
  Date date = dateFormat.parse(ts));
  long time = date.getTime();
  new Timestamp(time);

}

【讨论】:

  • 感谢您的调查!你的解决方案对我不起作用 - 我会更仔细地调查它:) 但是我做了一个简单的转换 bt Timestamp.valueOf(String)
  • String 相比,Timestamp 对象向前迈进了一步。但是,那个类已经过时了,那么为什么不向前迈出两个步骤并使用一个现代类呢? LocalDateTimeInstant,均来自现代 Java 日期和时间 API java.time
  • Timestamps 在数据库中设置。直接从桌面查找 db 是临时解决方案。总而言之,你的提示听起来不错。 ;)
  • 尽管名称相同,但 Java 中的 Timestamp 与 SQL 中的 timestamp 不同。不知道SQL Server JDBC驱动,应该可以将Instant或者LocalDateTime传递给setObject,在数据库端得到一个SQLtimestamp
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多