• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在java sql准备语句中使用时间戳

java 来源:Rajesh Rs 3次浏览

我想在Java中使用准备语句执行选择查询。 在Where子句中检查Timestamp类型列上的条件,如下所示。在java sql准备语句中使用时间戳

String selectSQL = "select * from db.keycontacts WHERE CREATEDDATETIME>?"; 
PreparedStatement preparedStatement = connect.prepareStatement(selectSQL); 
preparedStatement.setTimestamp(1, convertStrToTimestamp(lastSyncTimeStamp)); 
resultSet = preparedStatement.executeQuery(selectSQL); 

//函数在执行查询时,得到以下异常timestampString转换的java.sql.Timestamp

private java.sql.Timestamp convertStrToTimestamp(String dateTimeStr){ 

     java.sql.Timestamp timeStampDate = null; 
     try { 
      DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//2015-05-11 18:26:55 
      java.util.Date dateObj = (java.util.Date)formatter.parse(dateTimeStr); 
      timeStampDate = new Timestamp(dateObj.getTime()); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return timeStampDate; 
    } 

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 

那么究竟在这里哪里出错?

在此先感谢。

===========解决方案如下:

resultSet = preparedStatement.executeQuery(selectSQL); 

取出参数并切换到

resultSet = preparedStatement.executeQuery(); 

preparedStatement.executeQuery(selectSQL);通过查询优先于你connect.prepareStatement(selectSQL);通过查询这是简单的字符串("select * from db.keycontacts WHERE CREATEDDATETIME>?"),其中您可以设置任何参数,因此存在语法错误?

,你也可以说这个语句准备在PreparedStatement preparedStatement = connect.prepareStatement(selectSQL);,因为executeQuery()从Statement继承,它将执行查询而不准备它。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)