【问题标题】:PreparedStatement sql setDatePreparedStatement sql setDate
【发布时间】:2014-01-02 18:18:02
【问题描述】:

我有这个问题:

String sql ="select col1,col2,col3 from table where tstamp between '01/01/2014 00:00' and '01/01/2014 23:59'" ;

我想像这样使用PreparedStatementsetDate

String sql = "select col1,col2,col3 from table where tstamp between ? and ? " ;

PreparedStatement p = connection.prepareStatement(sql);

p.setDate(1,..);

我不知道该怎么做..请帮忙

我尝试了新的Date(int,int,int) 构造函数,但它没有设置小时和分钟。

【问题讨论】:

标签: java sql date


【解决方案1】:

JDBC 有三种时间类型,都在java.sql 包中:

  1. 日期,包含一个没有时间的日期
  2. 时间,包含一个没有日期的时间
  3. 时间戳,包含日期和时间。

因此您需要使用TimestampPreparedStatementsetTimestamp() 方法。

要从 String 构造 Timestamp 实例,请使用 SimpleDateFormat 将 String 解析为 java.util.Date 对象,然后通过传递从此 java.util.Date 对象获得的毫秒数来构造 Timestamp。

【讨论】:

    【解决方案2】:

    使用java.sql.Date

    try{
        sql   = "select col1,col2,col3 from table where tstamp between ? and ? ;
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, /**Your Date**/);
        pstmt.setString(2, /**Your Date**/);
        rs    = pstmt.executeQuery();
            . 
            . 
            .
    }catch (Exception e) {
         e.printStackTrace();
    }finally{
        sql = null;
        if(rs != null){
            rs.close();
            rs = null;
        }
        if(pstmt != null){
            pstmt.close();
            pstmt = null;
        }
        if(conn != null){
            conn.close();
            conn = null;
        }
    }
    

    对于More

    【讨论】:

      【解决方案3】:

      问题在于 java.sql 中的 Date 对象与 java.util

      中的 Date 不同

      那么如果你使用 p.setDate(1,..);java.util.Date 你将失去 时间。 一种可能的解决方案可能是您将来自 java.sql

      的日期作为参数传递

      【讨论】:

        猜你喜欢
        • 2013-09-08
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 2017-09-03
        相关资源
        最近更新 更多