Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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
Sql错误,当我在JAVA代码中实现join时_Java_Mysql_Jsp_Jdbc - Fatal编程技术网

Sql错误,当我在JAVA代码中实现join时

Sql错误,当我在JAVA代码中实现join时,java,mysql,jsp,jdbc,Java,Mysql,Jsp,Jdbc,我有两张桌子 第一张桌子 Profession带有两个列(Profession\u id,Profession\u name) 第二张桌子 申请人有五个栏(申请人id、专业id、姓、名、入学年份) 表profession中的profession\u id和表profession中的profession\u id是MySQL中的相关字段 我需要的不是职业id,而是可用职业的下拉列表。在这里,我使用内部连接实现 这是我的班级,与DB合作: public enum ApplicantDBProvide

我有两张桌子

第一张桌子

Profession
带有两个
列(Profession\u id,Profession\u name)

第二张桌子

申请人
有五个
栏(申请人id、专业id、姓、名、入学年份)

profession
中的
profession\u id
和表
profession
中的
profession\u id
是MySQL中的相关字段

我需要的不是职业id,而是可用职业的下拉列表。在这里,我使用
内部连接实现

这是我的班级,与DB合作:

public enum ApplicantDBProvider {

INSTANCE;

private Connection connection;

private ApplicantDBProvider() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_applicant", "root", "toor");
    } catch (ClassNotFoundException | SQLException e) {
        System.err.println("Class not found: com.mysql.jdbc.Driver " + e);
        throw new RuntimeException("Class not found: com.mysql.jdbc.Driver");
    }
}

public Applicant getApplicant(long applicantId) throws Exception {
    PreparedStatement preparedStatement = null;
    Applicant applicant = null;
    try {
        preparedStatement = connection.prepareStatement("SELECT * FROM applicant WHERE applicant_id=?");
        preparedStatement.setInt(1, (int) applicantId);

        ResultSet resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            applicant = new Applicant();
            applicant.setId(resultSet.getInt("applicant_id"));
            applicant.setFirstName(resultSet.getString("first_name"));
            applicant.setLastName(resultSet.getString("last_name"));
            applicant.setProfessionId(resultSet.getInt("profession_id"));
            applicant.setEntranceYear(resultSet.getInt("entrance_year"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (preparedStatement != null) {
            preparedStatement.close();
        }
    }

    return applicant;
}

public List<Applicant> getApplicants() throws Exception {
    Statement statement = null;
    List <Applicant> applicants = new ArrayList<>();

    try {
        statement = connection.createStatement();
        //ResultSet resultSet = statement.executeQuery("SELECT * FROM applicant");
        ResultSet resultSet = statement.executeQuery("select a.applicant_id, a.first_name, a.last_name, a.entrance_year, p.profession_name from applicant a join profession p on a.profession_id = p.profession_id");
        Applicant applicant = null;
        while (resultSet.next()) {
            applicant = new Applicant();
            applicant.setId(resultSet.getInt("applicant_id"));
            applicant.setFirstName(resultSet.getString("first_name"));
            applicant.setLastName(resultSet.getString("last_name"));
            applicant.setProfessionId(resultSet.getInt("profession_id"));
            applicant.setEntranceYear(resultSet.getInt("entrance_year"));
            applicants.add(applicant);

        }

    } catch (SQLException e) {
        throw new Exception(e);
    }

    return applicants;
}

public void saveApplicant(Applicant applicant) throws Exception {
    PreparedStatement preparedStatement = null;

    try {
        if (applicant.getId() == -1) {
            preparedStatement = connection.prepareStatement("INSERT INTO applicant (first_name, last_name, profession_id, entrance_year) VALUES (?,?,?,?)");

            preparedStatement.setString(1, applicant.getFirstName());
            preparedStatement.setString(2, applicant.getLastName());
            preparedStatement.setInt(3, (int)applicant.getProfessionId());
            preparedStatement.setInt(4, applicant.getEntranceYear());

        } else {
            preparedStatement = connection.prepareStatement("UPDATE applicant SET first_name=?, last_name=?, profession_id=?, entrance_year=?  WHERE applicant_id=?");

            preparedStatement.setString(1, applicant.getFirstName());
            preparedStatement.setString(2, applicant.getLastName());
             preparedStatement.setInt(3, (int) applicant.getProfessionId());
            preparedStatement.setInt(4, applicant.getEntranceYear());
            preparedStatement.setInt(5, (int) applicant.getId());
        }
        preparedStatement.executeUpdate();
    } catch (SQLException e) {
        throw new Exception(e);
    } finally {
        if (preparedStatement != null) {
            preparedStatement.close();
        }
    }
}

public Profession getProfession(long professionId) throws Exception {
    PreparedStatement preparedStatement = null;
    Profession profession = null;
    try {
        preparedStatement = connection.prepareStatement("SELECT * FROM profession WHERE profession_id=?");
        preparedStatement.setInt(1, (int) professionId);

        ResultSet resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            profession = new Profession();
            profession.setId(resultSet.getInt("profession_id"));
            profession.setProfessionName(resultSet.getString("profession_name"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (preparedStatement != null) {
            preparedStatement.close();
        }
    }

    return profession;
}

public List<Profession> getProfessions() throws Exception {
    Statement statement = null;

    List<Profession> professions = new ArrayList<>();
    try {
        statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("SELECT * FROM profession");
        Profession profession = null;
        while (resultSet.next()) {
            profession = new Profession();
            profession.setId(resultSet.getInt("profession_id"));
            profession.setProfessionName(resultSet.getString("profession_name"));
            professions.add(profession);
        }

    } catch (SQLException e) {
        throw new Exception(e);
    } finally {
        if (statement != null) {
            statement.close();
        }
    }

    return professions;
}

public void saveProfession(Profession profession) throws Exception {
    PreparedStatement preparedStatement = null;

    try {
        if (profession.getId() == -1) {
            preparedStatement = connection.prepareStatement("INSERT INTO profession (profession_name) VALUES (?) ");

            preparedStatement.setString(1, profession.getProfessionName());
        } else {
            preparedStatement = connection.prepareStatement("UPDATE profession SET profession_name=? WHERE profession_id=?");

            preparedStatement.setString(1, profession.getProfessionName());
            preparedStatement.setInt(2, (int) profession.getId());
        }
        preparedStatement.executeUpdate();
    } catch (SQLException e) {
        throw new Exception(e);
    } finally {
        if (preparedStatement != null) {
            preparedStatement.close();
        }
    }

}
但是,当我运行服务器并打开jsp时,出现了错误: java.lang.Exception:java.sql.SQLException:未找到“profession\u id”列

我不明白这是一个多么大的错误。可能是什么?请告诉我。谢谢。

编辑:

在这个查询中

选择一个申请人id、一个名字、一个姓氏、一个入学年份, p、 职业名称,p.职业id来自申请人a加入职业p 关于a.profession\u id=p.profession\u id

你只有

a、 申请人id,a.名字,a.姓氏,a.入学年份, p、 专业名称

没有
p.profession\u id

所以当你做一个

applicant.setProfessionId(resultSet.getInt("profession_id"));
您会得到一个异常,因为您的结果列表中没有该列

ResultSet resultSet = statement.executeQuery("select a.applicant_id, a.first_name, a.last_name, a.entrance_year, p.profession_name, p.profession_id from applicant a join profession p on a.profession_id = p.profession_id");
回答你的问题


我有课。applicator.java。在那门课上,我有一个professionId 具有长数据类型。现在是我的奎斯顿。我什么时候换衣服 申请人.setProfessionId(resultSet.getInt(“profession_id”))在 申请人.setProfessionId(resultSet.getString(“专业名称”)),i 需要将professionId更改为字符串数据类型

您可以向Application.java类添加类变量

作为

而且有两个,

applicant.setProfessionId(resultSet.getInt("profession_id"));
applicant.setProfessionName(resultSet.getString("profession_name"));
但是,

如果你在尝试,我引用

不要获取专业id,而是获取可用的 职业

您应该以不同的方式处理此问题,因为对于一个
应用程序
,此联接只会给出一个
专业名称

在taglib和数据绑定上有一个战利品


编辑2:

发布您的数据库结构,但是,当我在查询中插入“profession\u id”时,结果表中有profession\u id。我需要在结果查询中获取profession\u name。我理解,您建议我更改profession\u name上的profession\u id。但是,我的老师告诉我。它是通过连接来实现的。没有变化@瓦莱里奥解释一下我的老师告诉我的。它是通过连接来实现的。没有变化!对我说:)请回答一个问题!别走!我有课。applicator.java。在那个类中,我有长数据类型的professionId。现在是我的奎斯顿。当我在applicator.setProfessionId(resultSet.getString(“profession\u name”))上更改applicator.setProfessionId(resultSet.getInt(“profession\u id”))时,我需要将professionId更改为字符串数据类型吗?
ResultSet resultSet = statement.executeQuery("select a.applicant_id, a.first_name, a.last_name, a.entrance_year, p.profession_name, p.profession_id from applicant a join profession p on a.profession_id = p.profession_id");
private String professionName;

public String getProfessionName(){
    return professionName;
}


public String setProfessionName(String professionName){
    this.professionName = professionName
}
applicant.setProfessionId(resultSet.getInt("profession_id"));
applicant.setProfessionName(resultSet.getString("profession_name"));