Java使用外键

时间:2015-12-10 17:30:10

标签: java database foreign-keys

所以我正在为足球组织创建一个小型应用程序,需要能够将团队添加到数据库中。

我的数据库有以下ERD:

Database ERD

我有以下代码将团队添加到我的数据库中:

public void toevoegenPloeg(Ploeg ploeg) throws DBException, ApplicationException {
    //connectie tot stand brengen
    System.out.println(ploeg.getTrainerID());
    try (Connection connection = ConnectionManager.getConnection();) {
        //statement opstellen
        try (PreparedStatement statement = connection.prepareStatement("insert into ploeg (naam, niveau, trainer_id) values(?,?,?)");) {
            statement.setString(1, ploeg.getNaam());
            statement.setString(2, ploeg.getNiveau());
            statement.setInt(3, ploeg.getTrainerID());
            statement.execute();


        } catch (SQLException ex) {
            throw new DBException("SQL-exception in de toevoegenPloeg-methode - statement" + ex);
        }
    } catch (SQLException ex) {
        throw new DBException("SQL-exception in de toevoegenPloeg-methode - connectie " + ex);
    }

}

必须能够在没有培训师的情况下添加团队。 像这样:

PloegTrans PT = new PloegTrans();
PersoonTrans PeT = new PersoonTrans();

Ploeg ploeg1 = new Ploeg();
ploeg1.setNiveau("U9");
PT.ploegToevoegen(ploeg1);

Trainer_id是一个int,因为我还没有定义trainer_id。 trainer_id成为int的默认值,0。

但后来我得到了一个外键异常,因为数据库会查找id为0的培训师。

我怎样才能克服这个?

如何将我的int初始化为" null"?

2 个答案:

答案 0 :(得分:0)

使用statement.setNull(3, java.sql.Types.INTEGER);或将语句构造为insert into ploeg (naam, niveau) values(?,?),因此trainer_id默认为NULL

答案 1 :(得分:0)

在POJO方面,培训师ID应为java.lang.Integer,而不是原始int,以便null。在JDBC方面,您可以使用setObject而不是setInt,它接受​​null s:

// getTrainerID() returns either an Integer instance or null
statement.setObject(3, ploeg.getTrainerID());