Problème avec AUTO_INCREMENT ou primary key ?

Résolu
Bonjour,
Je travail sur java avec mysql. Je n'arrive à insérer mes données !!!
Problème suremnt lié au primary key car il me sort une erreur de type "duplicate ..." alors ke
pas du tout (j'ai essayé avec INNODB, mais je connai pas gran chose là dessus !), et lorque
j'essaye de mettre un AUTO_INCREMENT ... ça me donne:
parameter index out of range (8 > number of parameters which is 7)

Voici ma table :
CREATE table HOMOLOGIE(UG Varchar(20), GID Varchar(20), IDoligo Varchar(20), score Float(4,1), percent Float(5,2), length Int(8), nbmeralign Int(3), primary key(IDoligo,UG));


Voici mon code pour insérer les données :

else { 
	String []tab = new String[10];
	pstmt = connexion.prepareStatement
	("SELECT COUNT(*) Number FROM HOMOLOGIE");
	ResultSet rs = pstmt.executeQuery();
	rs.next(); int idunik = rs.getInt("Number")+1; 
		// je m'en servait pour mettre un identifiant ... mais plus m1tenant !
	do {	
		tab = Line.split("\t");
		// tab contient :
	// 0 ~ oligo / 1 ~ genbank / 2 ~ GI / 3 ~ UG / 4 ~ length / 5 ~ score / 6 ~ percent / 7 ~ align
					
try { 
		float floatscore = Float.parseFloat(tab[5]);
		float floatpercent = Float.parseFloat(tab[6]);
		int intalign = Integer.parseInt(tab[7]);
			if (intalign == 70){ 
				if (floatpercent >= 100.0){
					if (floatscore >= 130.0){
						if (tab[3].equals("null") == false){
				test = true; System.out.println(floatscore+" "+floatpercent+" "+intalign);
									}
								}
							}
						}
					}
catch (Exception exp){  }
					
	if(test == true) {
						
		pstmt = connexion.prepareStatement
("INSERT INTO HOMOLOGIE (UG,GID,IDoligo,score,percent,length,nbmeralign) VALUES (?,?,?,?,?,?,?)");
		if(tab[3].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setString(2, tab[3]);
		if(tab[0].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setString(3, tab[2]);
		if(tab[2].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setString(4, tab[0]);
		if(tab[5].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setFloat(5, Float.parseFloat(tab[5]));
		if(tab[6].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setFloat(6, Float.parseFloat(tab[6]));
		if(tab[4].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setInt(7, Integer.parseInt(tab[4]));
		if(tab[7].equals("null")) pstmt.setNull(1, java.sql.Types.NULL);
		else pstmt.setInt(8, Integer.parseInt(tab[7]));
		rows = pstmt.executeUpdate();
						
	pstmt = connexion.prepareStatement("INSERT INTO GENE (GI,GenBank) VALUES(?,?)");
		f(!tab[2].equals("null")) pstmt.setString(1, tab[2]);
		if(!tab[1].equals("null")) pstmt.setString(2, tab[1]);
		rows = pstmt.executeUpdate();
						
			}
				test=false;
	} while ((Line = buffR.readLine()) != null);


Si quelqu'un aurait la gentillesse de m'aider
Merci d'avance

--
Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure. - Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.
Configuration: PC: ACER
OS: Windows Vista / Linux Mandriva
Software : Eclipse, Photoshop

30 réponses

Résumé de la discussion

Des difficultés d'insertion apparaissent dans la table HOMOLOGIE en raison d'une clé primaire composite (IDoligo, UG) générant des doublons, malgré les tentatives d'utilisation d'INNODB et d'AUTO_INCREMENT. Les erreurs mentionnées incluent "duplicate entry" lors des insertions et "parameter index out of range" lorsque les paramètres ne correspondent pas à l'ordre des colonnes. Les réponses suggèrent soit d'assurer l'unicité des valeurs des colonnes constitutives de la clé primaire, soit d'éviter les doublons en réorganisant les colonnes et les paramètres. Quelques échanges proposent aussi d'utiliser un identifiant autonome (IDunik) ou de modifier la clé primaire pour accueillir des valeurs distinctes et réduire les conflits.

Bobot (l’IA à votre service)
  1. C résolu !!!!!

    le probleme vien d'une autre table ou je ne rentre que le GID donc forcément ca coince !!!!
    1. Donc c GID ki pose problem : 156041716 !!!!!
      quel merde !!!!!
      1. j'ai remarqué ke a la main ca marche :
        insert into HOMOLOGIE values (201,'Bt.87413','156041716','Bt00007507',139.0,100.00,698,70);

        | 35 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
        | 194 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |
        | 200 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
        | 201 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |

        et g regardé la ligne d'apres :
        Bt00007522 XM_866098 194671954 Bt.64896 1548 139 100 70

        donc en effet il a bien du rentrer les données meme si il me sort dupliqué !!
        ca viendrai du code java alors ???
        1. oui g bien fait 8 valeur et NULL compri !!!!! ==>
          Ben, dans ces conditions, mwa ze sècheuuu :(
          1. L'erreur à l'exécution est une erreur à l'exécution. Donc ça ne concerne pas tes données existantes uniquement, mais en ensemble constitué des données existantes PLUS la nouvelle ligne (qui, elle, est en échec). Une fois l'erreur obtenue, le fait de consulter la base ne permet pas de savoir quelle était la ligne pour laquelle l'INSERT a échoué (car l'opération a déjà été rollbackée).

            Donc, pour comprendre ce que tu obtiens comme erreur: La ligne que tu veux rajouter contient en position de la primary key une valeur parmi les valeurs se trouvant dans la base de données au momeent de l'insert.

            kes tu veu dire par 8 valeur +NULL ...? <==
            7 points d'interrogation et le NULL
            1. g compri !!! oui g bien fait 8 valeur et NULL compri !!!!!
              1. kan je di c sa mé entrées dupliké je repette just ce que ca me ressort comm erreur !!!
                Pour ces 2 entrée il me sort que c dupliqué alors ke ca ne l'ai pas !!!

                kes tu veu dire par 8 valeur +NULL ...?
                1. Arf. Résumons:

                  1. Tu as ta PK en primary key et les valeurs sont bien différentes. Pourquoi dis-tu alors
                  Regarde c sa mé deux entrée dupliquées !!!

                  | 423 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
                  | 582 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |


                  Les entrées ne sont pas "dupliquées".

                  2. J'ai remarqué dans un post précédent cette remarque
                  par contre j'ai essayé VALUES(NULL,?,?,?,?,?,?,?)
                  et ca me met : Column count doesn't match value count at row 1


                  Rassure-moi que tu as bien essayé avec un
                  INSERT IGNORE INTO HOMOLOGIE (IDunik, UG,GID,IDoligo,score,percent,length,nbmeralign) // 8 colonnes
                  VALUES(NULL,?,?,?,?,?,?,?) // 8 valeurs, NULL compris


                  ++
                  1. Les deux entrées

                    | 423 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
                    | 582 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |

                    représentent la situation actuelle dans ta base de données?
                    1. regarde c sa mé deux entrée dupliquées !!!

                      | 423 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
                      | 582 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |
                      1. et bien pourtant IDunik est bien different ... j'ai mem essayé de faire primary key(IDoligo,UG)
                        => donc là j'ai enlevé le IDunik car plus besoin ... mai ca met comm meme duplicate entré !!
                        1. Nannn !!! key 1 ca toujours été IDunik !!!!!!
                          kan j'avai pa IDunik c t ug é bien sur UG je le rentre 2 fois car c pour 2 IDoligo différents !!!
                          1. Oups, mal lu; excuses. C'est que tu essaies d'insérer une valeur déjà existante pour la primary key. Heu... Je n'ai pas de mysql dans les parages pour faire l'essai
                            1. Ben key 1 est la colonne UG, il me semble, nan? ^^

                              Regarde donc de ce côté.
                              1. j'ai déjà essayé ca me remet duplicate entry for key 1 !!!!!
                                1. Pardon, mea culpa. J'avais confondu, ignorant comme je suis, IDoligo avec IDunik.

                                  Mais ceci ne règle pas le problème déjà évoqué dans mon post #7: tu n'as pas de IDunik dans ta requête.
                                  INSERT IGNORE INTO HOMOLOGIE (UG,GID,IDoligo,score,percent,length,nbmeralign) VALUES(?,?,?,?,?,?,?)

                                  Rajoute donc IDunik et colle un NULL supplémentaire parmi les VALUES.
                                  • 1
                                  • 2