DAO méthode d'ajout: problème de contrainte
Résolu
Rune188
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
Rune188 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Rune188 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille sur une application web utilisant java ee et le patttern dao.
J'ai 2 table dans ma base de données:
Bookfile:

Book:

et j'essaye d'ajouter un "Book" qui lors de sa création créé un nombre donnée de "Bookfile" qui seront lié a celui-ci par un clé étrangère qui relie les 2 champ "idBook".
La clé étrangère et déjà créé mais celle ci créé un contrainte qui semble empêcher mes méthodes de fonctionner correctement.
Méthode d'ajout de Book:
Méthode d'ajout de BookFile :
Et cela me renvoie le message d'erreur suivant:

Comment résoudre ce problème sans se contenté de supprimer la clé étrangère ?
Je travaille sur une application web utilisant java ee et le patttern dao.
J'ai 2 table dans ma base de données:
Bookfile:
Book:
et j'essaye d'ajouter un "Book" qui lors de sa création créé un nombre donnée de "Bookfile" qui seront lié a celui-ci par un clé étrangère qui relie les 2 champ "idBook".
La clé étrangère et déjà créé mais celle ci créé un contrainte qui semble empêcher mes méthodes de fonctionner correctement.
Méthode d'ajout de Book:
@Override public void addNewBook(String isbn, String title, String author, String editor, String genre, String type, double refoundPrice, boolean ebook, String format,int nbr,int idLib) { Connection c = MySqlDaoFactory.getInstance().getConnection(); PreparedStatement ps = null; String sql = "INSERT INTO book(isbn,title,author,editor,genre,type,refoundPrice,ebook,format) VALUES (?,?,?,?,?,?,?,?,?)"; try{ ps=c.prepareStatement(sql); ps.setString(1, isbn); ps.setString(2, title); ps.setString(3, author); ps.setString(4, editor); ps.setString(5, genre); ps.setString(6, type); ps.setDouble(7, refoundPrice); ps.setBoolean(8, ebook); ps.setString(9, format); ps.executeUpdate(); BookFile bf = new BookFile(); Book b = getLastBookEntry(); int idBook = b.getIdBook()+1; for (int i = 0; i < nbr; i++) { bf.addNewBookFile(idLib,idBook); } ps.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(MySqlDaoBook.class.getName()).log(Level.SEVERE, null, ex); } finally{ MySqlDaoFactory.closeStatement(ps); MySqlDaoFactory.closeConnection(c); } }
Méthode d'ajout de BookFile :
@Override public void addNewBookFile(int idLibrary, int idBook) { Connection c = MySqlDaoFactory.getInstance().getConnection(); PreparedStatement ps = null; String sql = "INSERT INTO bookfile(idLibrary,idBook) VALUES (?,?)"; try{ ps=c.prepareStatement(sql); ps.setInt(1, idLibrary); ps.setInt(2, idBook); ps.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(MySqlBookFileDAO.class.getName()).log(Level.SEVERE, null, ex); } finally{ MySqlDaoFactory.closeStatement(ps); MySqlDaoFactory.closeConnection(c); } }
Et cela me renvoie le message d'erreur suivant:
Comment résoudre ce problème sans se contenté de supprimer la clé étrangère ?
A voir également:
- Impossible d'ajouter des contraintes d'index externe
- Chkdsk disque dur externe - Guide
- Index téléphonique - Guide
- Impossible d'ajouter un ami sur facebook - Guide
- Telecharger index - Télécharger - Gestion de fichiers
- Ajouter signature word - Guide
3 réponses
Bonjour,
Lorsque tu ajoutes un Bookfile il faut que l'idBook que tu passes en paramètre corresponde à un Book déjà inséré en base.
Tu devrais inverser ce morceau de code :
Pour avoir l'ajout du Book d'abord :
Lorsque tu ajoutes un Bookfile il faut que l'idBook que tu passes en paramètre corresponde à un Book déjà inséré en base.
Tu devrais inverser ce morceau de code :
for (int i = 0; i < nbr; i++) { bf.addNewBookFile(idLib,idBook); } ps.executeUpdate();
Pour avoir l'ajout du Book d'abord :
ps.executeUpdate(); for (int i = 0; i < nbr; i++) { bf.addNewBookFile(idLib,idBook); }
Merci de m'avoir répondu
J'ai modifié la méthode addNewBook mais malheureusement le problème reste le même :(
J'ai modifié la méthode addNewBook mais malheureusement le problème reste le même :(
@Override
public void addNewBook(String isbn, String title, String author, String editor, String genre, String type, double refoundPrice, boolean ebook, String format,int nbr,int idLib) {
Connection c = MySqlDaoFactory.getInstance().getConnection();
PreparedStatement ps = null;
String sql = "INSERT INTO book(isbn,title,author,editor,genre,type,refoundPrice,ebook,format) VALUES (?,?,?,?,?,?,?,?,?)";
try{
ps=c.prepareStatement(sql);
ps.setString(1, isbn);
ps.setString(2, title);
ps.setString(3, author);
ps.setString(4, editor);
ps.setString(5, genre);
ps.setString(6, type);
ps.setDouble(7, refoundPrice);
ps.setBoolean(8, ebook);
ps.setString(9, format);
ps.executeUpdate();
BookFile bf = new BookFile();
Book b = getLastBookEntry();
int idBook = b.getIdBook()+1;
for (int i = 0; i < nbr; i++) {
bf.addNewBookFile(idLib,idBook);
}
} catch (SQLException ex) {
Logger.getLogger(MySqlDaoBook.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
MySqlDaoFactory.closeStatement(ps);
MySqlDaoFactory.closeConnection(c);
}
}
Lorsque tu ajoutes un Bookfile il faut que l'idBook que tu passes en paramètre corresponde à un Book déjà inséré en base.
Pourquoi avoir ajouté +1 à l'idBook du dernier livre inséré ? Cela signifie que tu vas transmettre un id qui ne correspond à aucun livre...
Book b = getLastBookEntry(); int idBook = b.getIdBook()+1;
Pourquoi avoir ajouté +1 à l'idBook du dernier livre inséré ? Cela signifie que tu vas transmettre un id qui ne correspond à aucun livre...