MySql中的返回计数(*)给出了Java中的语法错误

MySql中的返回计数(*)给出了Java中的语法错误,java,mysql,Java,Mysql,我努力解决一个问题,但我不明白哪里出了问题。 我已经定义了存储过程(见下文)。当我从命令行调用它时,它会按预期工作。但是,当我从java类调用它时(如下),它给出了一个error(如下)。我已经调试过了,in参数具有预期值。 我真的希望有人能帮助我。谢谢 错误: boolean CheckProjectExistence(String dbname, int projectid){ try(Connection con = init();

我努力解决一个问题,但我不明白哪里出了问题。 我已经定义了存储过程(见下文)。当我从命令行调用它时,它会按预期工作。但是,当我从java类调用它时(如下),它给出了一个error(如下)。我已经调试过了,in参数具有预期值。 我真的希望有人能帮助我。谢谢

错误:

boolean CheckProjectExistence(String dbname, int projectid){              
        try(Connection con = init();
            CallableStatement stmt = con.prepareCall("{call sp_project_exists(?,?}"))
        {       
            stmt.setString(1,dbname);
            stmt.setInt(2, projectid);
            rs = stmt.executeQuery();

            while (rs.next()) {
              stmt.getInt("count");
            }
        }catch(SQLException ex){
            System.out.println("Feil med GeneralDAO.CheckProjectExistence "+   ex.getMessage());
        }   

        return false;
    }
USE PP_Master;
DROP PROCEDURE IF EXISTS `sp_project_exists`; 

DELIMITER //
CREATE PROCEDURE sp_project_exists (IN p_dbname VARCHAR(30),IN p_projectid INT)
BEGIN

SET @tableName = concat(p_dbname, '.Project');

SET @sql_text = 
concat('SELECT COUNT(ProjectId) AS count FROM ',
@tableName, ' WHERE ProjectId=', p_projectid, ';');


PREPARE stmt FROM @sql_text;
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;  

END //
DELIMITER ;
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取第1行“()”附近使用的正确语法

调用存储过程的JAVA过程:

boolean CheckProjectExistence(String dbname, int projectid){              
        try(Connection con = init();
            CallableStatement stmt = con.prepareCall("{call sp_project_exists(?,?}"))
        {       
            stmt.setString(1,dbname);
            stmt.setInt(2, projectid);
            rs = stmt.executeQuery();

            while (rs.next()) {
              stmt.getInt("count");
            }
        }catch(SQLException ex){
            System.out.println("Feil med GeneralDAO.CheckProjectExistence "+   ex.getMessage());
        }   

        return false;
    }
USE PP_Master;
DROP PROCEDURE IF EXISTS `sp_project_exists`; 

DELIMITER //
CREATE PROCEDURE sp_project_exists (IN p_dbname VARCHAR(30),IN p_projectid INT)
BEGIN

SET @tableName = concat(p_dbname, '.Project');

SET @sql_text = 
concat('SELECT COUNT(ProjectId) AS count FROM ',
@tableName, ' WHERE ProjectId=', p_projectid, ';');


PREPARE stmt FROM @sql_text;
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;  

END //
DELIMITER ;
MySQL 5.6.30存储过程定义:

boolean CheckProjectExistence(String dbname, int projectid){              
        try(Connection con = init();
            CallableStatement stmt = con.prepareCall("{call sp_project_exists(?,?}"))
        {       
            stmt.setString(1,dbname);
            stmt.setInt(2, projectid);
            rs = stmt.executeQuery();

            while (rs.next()) {
              stmt.getInt("count");
            }
        }catch(SQLException ex){
            System.out.println("Feil med GeneralDAO.CheckProjectExistence "+   ex.getMessage());
        }   

        return false;
    }
USE PP_Master;
DROP PROCEDURE IF EXISTS `sp_project_exists`; 

DELIMITER //
CREATE PROCEDURE sp_project_exists (IN p_dbname VARCHAR(30),IN p_projectid INT)
BEGIN

SET @tableName = concat(p_dbname, '.Project');

SET @sql_text = 
concat('SELECT COUNT(ProjectId) AS count FROM ',
@tableName, ' WHERE ProjectId=', p_projectid, ';');


PREPARE stmt FROM @sql_text;
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;  

END //
DELIMITER ;

只需更改以下行

CallableStatement stmt = con.prepareCall("{call sp_project_exists(?,?}"))


为什么不把调用函数的括号合上?{call sp_project_exists(?,}->{call sp_project_exists(?)}非常感谢。在你指出之前,我没有看到那个打字错误。现在我又犯了一个错误,但我希望我能解决这个问题。