Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java和Mysql获取异常com.Mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:_Java_Mysql_Jdbc - Fatal编程技术网

使用Java和Mysql获取异常com.Mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

使用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

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在获取此异常的第1行的“?”附近使用的正确语法

        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在今天被设计出来,将会做出不同的选择。