Problème avec AUTO_INCREMENT ou primary key ?

Résolu
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

30 réponses

thanks33 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Si ton IDoligo est en auto incrément dans mysql

ta requete resemblera a sa :

INSERT INTO HOMOLOGIE (UG,GID,IDoligo,score,percent,length,nbmeralign) VALUES (?,?,NULL,?,?,?,?)

OU


INSERT INTO HOMOLOGIE (UG,GID,score,percent,length,nbmeralign) VALUES (?,?,?,?,?,?)
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
Ce n'est pas mon oligo qui doit etre auto_incrémenté ... du coup je rajoute une varible : IDunik
IDunik Int AUTO_INCREMENT primary key,
Mais j'ai toujours un souci d'une donnée dupliqué alors ke c faux avec ta solution.
C bizar c comme si IDunik en primary key y s'en fichai !!! pourtant c mem pasl es meme oligos ?

| 423 | Bt.87413 | 156041716 | Bt00001797 | 139.0 | 100.00 | 698 | 70 |
| 582 | Bt.87413 | 156041716 | Bt00007507 | 139.0 | 100.00 | 698 | 70 |
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Salut,

Un coup d'oeil sur ton code met en évidence
VALUES (?,?,?,?,?,?,?)
et ceci
pstmt.setInt(8...
Essaie avec un
VALUES (?,?,?,?,?,?,?,?)
(i.e., tu rajoutes un point d'interrogation).

++
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
ça me met no value specified for parameter 8 !!!!!!!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Une des colonnes est en autoincrement? Si oui, regarde le post 1 de thanks33 (tu mets NULL en bonne position). L'idée est d'avoir un match entre le nombre max passé à setInt() et le nombre de "?", NULL compris.

++
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
avoir un match ?? J'ai bo mettre NULL en prmiere position pour mon IDunik (qui est en auto_increment) ou un '?' en plus .........ya rien ki marche !?!
J'en ai marr j'y capich rien du tt !!!!!!
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Je capiche encore moins que toi si tu ne prends pas le soin de bien expliquer les choses et de te relire :p

INSERT INTO HOMOLOGIE (UG,GID,IDoligo,score,percent,length,nbmeralign) <== je ne vois pas de trace de IDunik dans cette requête...
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
desolé .. comme j'ai essayé plusieurs truc c un peu fouilli !!!
voilà ce ke j'essaye en ce moment :

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

INSERT IGNORE INTO HOMOLOGIE (UG,GID,IDoligo,score,percent,length,nbmeralign) VALUES(?,?,?,?,?,?,?)
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
(UG,GID,IDoligo,score,percent,length,nbmeralign) VALUES(?,?,NULL,?,?,?,?)
donne quoi?
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
pk tu veu mettre IDoligo a NULL s'il est pas auto incrementé !!??
ca fait : parameter index out of range (7 > number of parameters which is 6)

par contre j'ai essayé VALUES(NULL,?,?,?,?,?,?,?)
et ca me met : Column count doesn't match value count at row 1

Ca veu dire quoi ?????
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
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.
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai déjà essayé ca me remet duplicate entry for key 1 !!!!!
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
Ben key 1 est la colonne UG, il me semble, nan? ^^

Regarde donc de ce côté.
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
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
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
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 !!!
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
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é !!
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
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 |
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
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?
0
madeinloveyou Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
ouiiiii !!!
0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
=)
Et quelle est la colonne IDunik parmi les colonnes listées?
0