Java 如何将预处理语句与内部sql语句一起使用?

Java 如何将预处理语句与内部sql语句一起使用?,java,sql,jdbc,prepared-statement,Java,Sql,Jdbc,Prepared Statement,执行此操作时,它会引发以下异常, 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“SELECT travel\u manager\u id FROM travel\u agency\u manager WHERE user\u id=SELECT user\u i”附近使用的正确语法 公共类AgencyRegistrationDAOImpl扩展了DBConnection{ public int registerAgency(Agency agency) thro

执行此操作时,它会引发以下异常, 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“SELECT travel\u manager\u id FROM travel\u agency\u manager WHERE user\u id=SELECT user\u i”附近使用的正确语法

公共类AgencyRegistrationDAOImpl扩展了DBConnection{

public int registerAgency(Agency agency) throws SQLException {

    int returnVal = 0;
    Connection connection = getConnection();

        if (connection != null) {

            String query = "INSERT INTO travel_agency (agency_manager_id,trade_name," +
        "company_name,address,email,city,district,tpno,web_link,description,agency_image_link,business_registration_number" +
        ",isApproved) VALUES " +
        "(SELECT travel_manager_id FROM travel_agency_manager WHERE user_id=(SELECT user_id FROM users WHERE email=?)),?,?,?,?,?,?,?,?,?,?,?,?)";


            returnVal = CRUDOperations.insertAsPreparedStmt(query, connection, agency.getUserName(), agency.getTradeName(),
                    agency.getCompanyName(),  agency.getAddress(), agency.getEmail(), agency.getCity(),
                    agency.getDistrict(), agency.getTelePhoneNumber(), agency.getWeblink(), agency.getDescription(),
                    agency.getImagePath(), agency.getRegistration(), 0);

        }

    return returnVal;
}
}

公共级CRUDO操作{

public static int insertAsPreparedStmt(String query, Connection connection, Object... values) throws SQLException {

    PreparedStatement preparedStatement = null;
    try {

        if (connection != null) {
            preparedStatement = connection.prepareStatement(query);

            for (int index = 0; index < values.length; index++) {
                preparedStatement.setObject(index + 1, values[index]);
            }
            return preparedStatement.executeUpdate();
        }

    } finally {
        if (!connection.isClosed() && !preparedStatement.isClosed()) {
            preparedStatement.close();
            connection.close();
        }
    }
    return 0;
}
}

您的SQL语法有错误

这不是正确的语法

INSERT INTO ... VALUES SELECT ....
正确的语法是

INSERT INTO ... SELECT ...
这是你的电话号码


当你问你的问题时,在文本区域右侧有一个大橙色的“如何设置格式”框,其中包含有用的信息。还有一个完整的格式化工具条。还有一个[?]按钮提供格式化帮助。还有一个预览区,位于文本区和“发布您的问题”按钮之间,这样您就必须滚动过去才能找到该按钮,以鼓励您查看该按钮,显示您的帖子在发布时的外观。把你的帖子说清楚,并证明你花了时间这样做,可以提高你得到好答案的机会。此外,这几乎不是一个问题,只是一个代码转储;因为这似乎极不可能改变问题的含义,但正如霍尼獾所说,这不是一个问题。不清楚标题中的问题如何适用于问题中的代码。您已经在代码中使用了一个准备好的语句。您似乎没有更正别人为您更正的格式。我已将缺少的语句添加到该语句中。但是仍然有一个错误,com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第行“从旅行社选择旅行社管理者id,其中用户id=选择用户i”附近使用的正确语法1@SenalWeerasinghe显示更正的陈述请使用编辑您的问题it@SenalWeerasinghe是什么?我已经编辑了我的答案,因为在发布之前我没有思考。它是MySQL版本5.1.39。@Senalweerasingh他检查正确的语法。当然,更新参数索引,因为电子邮件现在已经结束了。
INSERT INTO travel_agency (
            agency_manager_id,trade_name, company_name,address,email,city,district,tpno,web_link,description,agency_image_link,business_registration_number, isApproved
    ) 
    SELECT travel_manager_id,?,?,?,?,?,?,?,?,?,?,?,?
            FROM travel_agency_manager WHERE user_id=
            (
                SELECT user_id FROM users WHERE email=?
            )