2015-12-10 4 views
2

Итак, я создаю небольшое приложение для футбольной организации, которое должно иметь возможность добавлять команды в базу данных.Java вставляет данные в базу данных с помощью внешнего ключа

Моя база данных имеет следующие 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 является ИНТ и потому, что я не определил trainer_id. trainer_id становится по умолчанию в междунар, 0.

Но я получаю исключение внешних ключей, так как база данных ищет тренера с идентификатором 0.

Как я могу преодолеть это?

Как инициализировать мой int как «null»?

ответ

0

Используйте statement.setNull(3, java.sql.Types.INTEGER); или создайте инструкцию как insert into ploeg (naam, niveau) values(?,?), поэтому trainer_id по умолчанию будет NULL.

0

На стороне POJO идентификатор тренера должен быть java.lang.Integer, а не примитивным int, чтобы разрешить null s. На стороне JDBC, вы могли бы использовать setObject вместо setInt, который не принимает null S:

// getTrainerID() returns either an Integer instance or null 
statement.setObject(3, ploeg.getTrainerID()); 
Смежные вопросы