bonsoir a tous !
voila, je veux realiser une boucle depuis quelque heures, j'ai tout essaye et je deviens fou, je sais c'est stupide mais j'arrive plus a voir mes erreurs, vous voulez bien jeter un pt'it coup d'oeil ?
je vous explique le principe, ca se passe dans la fonction create d'un DAO qui ajoute donc un objet client dans la table du meme nom, ca doit gerer l'attribution de key en lieu et place de mysql c'est a dire :
si vide commencer a zero
si key sont contigües alors donner le dernier numero + 1
si trou (du a des delete) alors completer dabord les trou
voila mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 Integer key = info.getIdclient(); int firstid= -1; try { c = getConnection(); //code a valider si gestion manuelle de la PK //version 1: delegation auto_incremente a MySQL if (key == null){ ps2 = c.prepareStatement(FIND_ALL_ID); rs = ps2.executeQuery(); if (!(rs.next())){ //cas ou le resulset est vide | cad premier enregistrement System.out.println("Le resultset est vide"); firstid=0; }else{//autre cas | rs rows >=1 int i,j; i=j=1; firstid=1; System.out.println("la valeur initiale de i est : " + i); System.out.println("l'indice initiale du resultset est : " + rs.getRow()); for(i=rs.getInt(1), j=1 ; rs.next() ; j++){ System.out.println("la valeur de i est : " + i); System.out.println("la valeur de j est : " + j); if ((i-j)>0){ firstid = j; break; }else{ firstid = i + 1; } } } System.out.println("la valeur de firstid est : " + firstid); info.setIdclient(new Integer(firstid)); }else { //cas si l'objet client passe en param force une valeur d'ID au risque de lever une exception if (!rs.next()) { throw new clientDAOSysException("The sequence ID does not exist"); } } //a partir de la la fonction create fonctionne parfaitement
et voila le message d'une fonction main
alors bien sur j'ai compris que la clef est attribue deux fois mais quand c'est pas la 1 c'est la deux y'a toujours un moment ou ca planteCette Fonction creer un nouveau client dans la base
Le resultset est vide
la valeur de firstid est : 0
un nouveau client a ete crer dans la base, il porte l'ID 0
Saisissez un nombre ; tapez 0 pour quitter
Cette Fonction creer un nouveau client dans la base
la valeur initiale de i est : 1
l'indice initiale du resultset est : 1
la valeur de firstid est : 1
un nouveau client a ete crer dans la base, il porte l'ID 1
Saisissez un nombre ; tapez 0 pour quitter
Cette Fonction creer un nouveau client dans la base
la valeur initiale de i est : 1
l'indice initiale du resultset est : 1
la valeur de i est : 0
la valeur de j est : 0
la valeur de firstid est : 1
sun.cne.msp.client.exception.clientDAOSysException: SQLException : java.sql.SQLException: Duplicate entry '1' for key 1
at sun.cne.msp.client.DAO.MySQLclientDAO.create(MySQLclientDAO.java:258)
at sun.cne.msp.Start.main(Start.java:87)
Moi je vois vraiment plus, please help !!!
WDIO
Partager