Générer automatiquement la key sur l'insertion JDBC dans SQL Server

Existe-t-il un RDMS général, transversal, permettant de générer automatiquement une key sur un insert JDBC? Par exemple si j'ai une table avec une key primaire, id, et une valeur int:

create table test ( id int not null, myNum int null ) 

et faire un insert

 PreparedStatement statement = connection.prepareStatement("insert into test(myNum) values(?)", Statement.RETURN_GENERATED_KEYS); statement.setInt(1, 555); statement.executeUpdate(); statement.close(); 

Je reçois une java.sql.SQLException: Impossible d'insert la valeur NULL dans la colonne 'id'.

J'ai le sentiment que cela dépend entièrement des RDMS. Nous utilisons en utilisant SQL Server 2005 et j'ai défini

 CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 1) ON [PRIMARY] 

dans la table sans chance.

Ceci est complètement dépendant de la database. Il existe deux options principales: 1 – SGBD autorisant un mot key à incrémentation automatique à côté de la définition de key primaire et 2 – SGBD fournissant des générateurs de séquence (que vous pouvez ensuite utiliser pour générer les nouvelles valeurs du PK, par exemple en écrivant triggersur "avant insertion" qui insère automatiquement la nouvelle valeur dans la colonne avant de terminer l'insertion).

Pour autant que je sache:

  1. Firebird utilise des séquences
  2. DB2 permet de définir une colonne comme "GENERATED BY DEFAULT AS IDENTITY";
  3. Interbase utilise des séquences (appelées générateurs)
  4. MySQL a la clause "AUTO_INCREMENT"
  5. Oracle utilise des séquences
  6. PostgreSQL utilise des séquences
  7. SQLServer a la clause "IDENTITY (1,1)"

Vous devez définir la colonne id dans la table de test pour créer automatiquement une identité. Dans le cas de SQL Server, vous devez définir la propriété IDENTITY() sur la colonne ID.

Ceci est dépendant de la database. Oracle nécessite la création d'une SEQUENCE et sur MySQL vous définissez simplement la colonne comme incrémentation automatique.

Vous pouvez toujours utiliser Hibernate.

Pour autant que je sache, cela dépend de la database. De même avec l'insertion d'horodatages; certains vont insert l'heure actuelle lorsque vous insérez une valeur nulle.