15 votes

Solution pour les "primitives nulles" dans JDBC PreparedStatement ?

Lors de l'utilisation de JDBC brut, il est possible de paramétrer un PreparedStatement comme suit :

PreparedStatement statement = connection.prepareStatement(someSQLString);
String someString = getSomeString();
Integer int = getSomeInteger();
statement.setString(1, someString);
statement.setLong(2, 5L);
statement.setInt(3, int);

...

Ici, si someString es null c'est très bien - les chaînes de caractères sont nullables. Mais si getSomeInteger() retours null Nous avons un problème.

PreparedStatement#setInt(int,int) définit une primitive int comme valeur, et ne peut donc pas être null .

Cependant, il est parfaitement plausible que je veuille que la valeur de la troisième colonne ci-dessus soit null pour ce disque particulier. Après tout, tous les SGBDR avec lesquels j'ai travaillé autorisent les champs numériques (INT, LONG, etc.) à être NULLABLES...

Quelle est donc la solution ?

27voto

Luiggi Mendoza Points 46063

N'utilisez aucun de ces éléments et utilisez setObject au lieu de cela, laissez le pilote JDBC gérer le null à votre place.

16voto

kocko Points 18585

Vous pouvez utiliser le setNull(int parameterIndex, int sqlType) de la méthode PreparedStatement classe.

Voici un exemple d'utilisation :

  String query = 
     "insert into nullable_table(id,string_column, int_column) values(?, ?, ?)";

  // create PrepareStatement object
  PreparedStatement pstmt = connection.prepareStatement(query);
  pstmt.setString(1, id);
  pstmt.setNull(2, java.sql.Types.VARCHAR);
  pstmt.setNull(3, java.sql.Types.INTEGER);

Exemple tiré de aquí .

3voto

Nambari Points 42066

Vous devez utiliser setNull() méthode. Sur la base du paramètre est null ou ne pas vérifier, vous devez soit appeler setNull() (ou) setInt() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X