Cuando estamos usando un PreparedStatement en Java para ejecutar una sentencia SQL sobre Oracle, por ejemplo, un SELECT, hemos de usar métodos diferentes dependiendo del tipo de dato que queramos insertar/recuperar. Por ejemplo, imaginemos un método que inserta un Producto que se le pasa por parámetro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
/** * Inserta el producto en bas de datos * @param _producto */ public void insertarProducto(Productos _producto){ PreparedStatement productoStm; try{ // Hacemos el INSERT productoStm = this.conn.prepareStatement( "INSERT INTO PRODUCTOS (CODIGO ,DENOMINACION, PRECIO, CANTIDAD) " + "VALUES (?, ?, ?, ?)"); productoStm.setInt(1, _producto.getId()); productoStm.setString(2, _producto.getDenominacion()); productoStm.setDouble(3, _producto.getPrecio()); productoStm.setInt(4, _producto.getCantidad()); productoStm.executeUpdate(); System.out.printf("[INFO] Se ha insertado correctamente el producto.\n"); }catch( SQLException sqlex){ System.out.printf("[ERROR] No es posible insertar el producto. Razon: " + sqlex.toString() + ".\n"); } } |
El problema es cuando estos valores que les pasamos, queremos que sean null. Dependiendo del tipo de dato, usaremos un método u otro. Por ejemplo, cuando es un String, se le puede asignar el valor null directamente, pero para numéricos, hemos de usar el método setNull(). Veamos un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
/** * Inserta el producto en bas de datos * @param _producto */ public void insertarProducto(Productos _producto){ PreparedStatement productoStm; try{ // Hacemos el INSERT productoStm = this.conn.prepareStatement( "INSERT INTO PRODUCTOS (CODIGO ,DENOMINACION, PRECIO, CANTIDAD) " + "VALUES (?, ?, ?, ?)"); productoStm.setNull(1, java.sql.Types.BIGINT); productoStm.setString(2, null); productoStm.setNull(1, java.sql.Types.DOUBLE); productoStm.setNull(4, java.sql.Types.BIGINT); productoStm.executeUpdate(); System.out.printf("[INFO] Se ha insertado correctamente el producto.\n"); }catch( SQLException sqlex){ System.out.printf("[ERROR] No es posible insertar el producto. Razon: " + sqlex.toString() + ".\n"); } } |