Oracle et JDBC, Enregistrement

perrotju Messages postés 7 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2006 - 26 mai 2005 à 09:27
perrotju Messages postés 7 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2006 - 26 mai 2005 à 16:11
Voila mon problème : dans ma base de données Oracle, j'ai créé une table
dans laquelle j'ai inséré une séquence, séquence rattachée à un champ (identifiant).
Mais, sous Java, je n'arrive pas à créer un enregistrement, plus précisemment,
l'identifiant de ma table ne s'incrémente pas. Voici le code :


String requete = "INSERT INTO maTable (NOM, PRENOMON)" +
"VALUES ('" + nom + "','" + prenom + "')";
ma_Base.exec_Update(requete);


Je tiens à préciser que le code suivant fonctionne (à condition qu'il n'y ait pas de violation de contrainte unique) :


int id = 15;
String requete = "INSERT INTO maTable (ID, NOM, PRENOMON)" +
"VALUES ('" + id + "','" + nom + "','" + prenom + "')";
ma_Base.exec_Update(requete);

Merci d'avance

2 réponses

safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
26 mai 2005 à 09:33
t'as verifié si le problème n'est pas ds ta base de données et non pas ds le code Java? je crois ke la sequence est pas bien faite et/ou attachée au champs id, tu doi essayer d'executer la requette sur SQL+ de oracle (ou autre editeur) pour s'assurer du fonctionnement de la seq!
ok?
0
perrotju Messages postés 7 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2006
26 mai 2005 à 16:11
Le pb vient effectivement de la bd. En insérant des valeurs fictives, le pb persiste. Voici la définition de ma table :


CREATE TABLE SPECIFIQUE
(
ID_SPECIFIQUE INTEGER NOT NULL,
NOM_SPECIFIQUE VARCHAR2(50 BYTE),
DESCRIPTION_SPECIFIQUE VARCHAR2(200 BYTE)
)
TABLESPACE APPLSYSD
PCTUSED 40
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 40K
MINEXTENTS 1
MAXEXTENTS 505
PCTINCREASE 50
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
LOGGING
NOCACHE
NOPARALLEL;



CREATE UNIQUE INDEX PK_SPECIFIQUE ON SPECIFIQUE
(ID_SPECIFIQUE)
LOGGING
TABLESPACE APPLSYSD
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 40K
MINEXTENTS 1
MAXEXTENTS 505
PCTINCREASE 50
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;



ALTER TABLE SPECIFIQUE ADD (
CONSTRAINT PK_SPECIFIQUE PRIMARY KEY (ID_SPECIFIQUE)
USING INDEX
TABLESPACE APPLSYSD
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 40K
MINEXTENTS 1
MAXEXTENTS 505
PCTINCREASE 50
FREELISTS 1
FREELIST GROUPS 1
));


et les caractéristiques de la séquence :

Increment by 1
Last value 6
Min value 0
Max value 50000
Cache? 0
Cycle yes
Order No

J'en suis à me demander si la solution ne serait pas d'abandonner l'idée de la séquence et de gérer l'id à partir du programme java.
0
Rejoignez-nous