我正在尝试使用Java中的准备好的语句执行选择查询。
在Where子句中,im检查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
那么我在哪里错呢?
提前致谢。
最佳答案
从中删除参数
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继承的,它将执行查询而无需准备它。