使用Java和Mysql获取异常com.Mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在获取此异常的第1行的“?”附近使用的正确语法使用Java和Mysql获取异常com.Mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:,java,mysql,jdbc,Java,Mysql,Jdbc,com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在获取此异常的第1行的“?”附近使用的正确语法 private String selectCustDetail= "SELECT NAME, PASSWORD, RESID, ACTIVATED, USERTYPE FROM USERDETAIL WHERE MOBILENO=?"; R
private String selectCustDetail= "SELECT NAME, PASSWORD, RESID, ACTIVATED, USERTYPE FROM USERDETAIL WHERE MOBILENO=?";
ResultSet rs;
//PreparedStatement preparedStatement = null;
PreparedStatement preparedStatement = null ;
try {
// preparedStatement = con.prepareStatement(selectCustDetail);
preparedStatement = con.prepareStatement(selectCustDetail);
preparedStatement.setString(1, mobileno.toString().trim());
rs = preparedStatement.executeQuery(selectCustDetail );
while (rs.next()) {
// LOGGER.info("fetching - 1" + mobileno);
System.out.println(rs.getString("name"));
userDetai.setName(rs.getString("name"));
userDetai.setPassword(rs.getString("password"));
userDetai.setRestaurant(rs.getString("resId"));
userDetai.setActivated(rs.getString("activated"));
userDetai.setType(rs.getString("userType"));
// LOGGER.info("fetching - 2" + userDetai.getActivated());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//LOGGER.info("Exception - " + e.getMessage());
dinepostcons.msg = dinepostcons.dbError;
return false;
}
finally
{try {
if (preparedStatement != null) {
preparedStatement.close();
}
改变
rs = preparedStatement.executeQuery(selectCustDetail );
到
您需要使用绑定参数调用preparedStatement
的方法。不是来自语句
的方法,该方法接受不带绑定参数的字符串。更改
rs = preparedStatement.executeQuery(selectCustDetail );
到
您需要使用绑定参数调用preparedStatement
的方法。不是来自语句
的方法,它接受一个字符串
而不带绑定参数。啊,继承的滥用,即JDBC API…谢谢。。。在过去的一个小时里,我一直在忽视这一点。谢谢again@BoristheSpider在较新的JDBC版本中,他们确实解决了这个问题,要求驱动程序在对准备好的或可调用的语句调用带有字符串的executeXXX方法时抛出异常,但在MySQL中,这种情况仍然只是“偶然”发生的,而不是有意遵守规范;作为编译时类型安全性的替换的运行时错误。我真的很想知道他们是否最终会像对待日期时间API那样彻底修改整个shebang…@Boristespider,这是你为向后兼容性付出的代价。我敢打赌,如果JDBC在今天被设计出来,将会做出不同的选择。啊,继承的滥用,即JDBCAPI…谢谢你。。。在过去的一个小时里,我一直在忽视这一点。谢谢again@BoristheSpider在较新的JDBC版本中,他们确实解决了这个问题,要求驱动程序在对准备好的或可调用的语句调用带有字符串的executeXXX方法时抛出异常,但在MySQL中,这种情况仍然只是“偶然”发生的,而不是有意遵守规范;作为编译时类型安全性的替换的运行时错误。我真的很想知道他们是否最终会像对待日期时间API那样彻底修改整个shebang…@Boristespider,这是你为向后兼容性付出的代价。我敢打赌,如果JDBC在今天被设计出来,将会做出不同的选择。