在java sql准备语句中使用Timestamp

时间:2015-05-14 06:13:36

标签: java mysql sql-server prepared-statement sql-timestamp

我正在尝试使用Java中的prepared语句执行select查询。 在Where子句中,我正在检查Timestamp类型列上的条件,如下所示。

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

那么我到底哪里错了?

提前感谢。

1 个答案:

答案 0 :(得分:2)

中删除参数
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它将执行查询而不进行准备。