J'utilise des déclencheurs pour définir les valeurs de colonne PK de toutes les tables, donc je ne fais aucune opération sur les ID dans java mais j'ai besoin de l'ID après l'insertion.Java JDBC Récupérer l'ID après l'insertion
Comment puis-je obtenir l'ID?
stat.execute("INSERT INTO TPROJECT_PROCESS_GROUP(NPROJECT_ID,VDESCRIPTION) " +
"VALUES(" +
"'" + projectID + "'," +
"'" + description + "'" +
"");
Edit: Salut à nouveau je lis la question, maintenant, je reçois une exception comme « opération non prise en charge » (i traduit de ma langue maternelle la forme anglaise exacte peut être différente). Je suppose que cela concerne le support d'Oracle pour GetGeneratedKeys? Sais tu quelque chose à propos de cela? Solution: Comme mentionné dans un livre sur les instructions d'appel Cette instruction peut être utilisée pour exécuter des procédures stockées et des fonctions. Contrairement à PreparedStatement, la plupart des bases de données n'effectuent aucune préparation pour l'appel, car c'est une commande si simple. Les instances CallableStatement peuvent être utilisées pour retourner l'objet que la procédure stockée ou la fonction, pour être plus exact, retourné.
OracleConnection conn = null;
//OraclePreparedStatement pstat = null;
OracleCallableStatement cstat = null;
String sql = "BEGIN INSERT INTO TPROJECT P (VPROJECT_TITLE,VPROJECT_DESC) VALUES(?,?) RETURNING P.NPROJECT_ID INTO ?; END;";
try {
conn = ConnectionUtility.GetConnection();
cstat = (OracleCallableStatement)conn.prepareCall(sql);
cstat.setString(1, title);
cstat.setString(2, description);
cstat.registerOutParameter(3, OracleTypes.NUMBER);
cstat.execute();
int returnedID = cstat.getInt(3);
// System.out.println(returnedID);
conn.close();
return returnedID;
en double de [JDBC: Comment peut-on s'insérer ID d'enregistrement en Java] (http://stackoverflow.com/questions/1915166/jdbc-how-can -we-get-insert-inscript-id-in-java) Notez que votre instruction est sensible aux injections SQL. Vous devriez préférer 'PreparedStatement' à' Statement '. – BalusC
En fait, je ne suis pas sûr si c'est un doublon * exact *, car ici, d'une certaine façon, un déclencheur est utilisé. – erickson
@erickson: Le terme est en effet ambigu dans le contexte de la question, mais sous le capot, MySQL 'auto_increment', DB2/MSSQL' identity' et Oracle/PostgreSQL 'serial' utilisent tous des triggers. Je ne vois pas pourquoi on en créerait un personnalisé pour l'insertion d'identifiant. – BalusC