De acuerdo con los documentos de Java PreparedStatement.setNull: "Nota: debe especificar el parámetro de tipo SQL ". ¿Cuál es la razón por la cual el método requiere el tipo SQL de la columna ?
Para una compatibilidad máxima; según la especificación, hay algunas bases de datos que no permiten enviar NULL sin tipo a la fuente de datos subyacente.
me di cuenta de que la aprobación de java.sql.Types.VARCHAR también trabaja para columnas no varchar. ¿Hay escenarios de en los cuales VARCHAR no sea adecuado (ciertos tipos de columna o ciertos proveedores de DB)?
No creo que ese tipo de comportamiento realmente sea parte de la especificación o si lo es, entonces estoy seguro de que hay algún tipo de coerción implícita sucediendo allí. En cualquier caso, no se recomienda confiar en ese tipo de comportamiento que podría romperse cuando cambie el almacén de datos subyacente. ¿Por qué no simplemente especificar el tipo correcto?
1. Todavía no entiendo por qué tengo que declarar el tipo. Por lo que sé, el comando ACTUALIZAR con SET MY_COLUMN = NULL funcionará en cada tipo de columna, entonces ¿por qué no es suficiente? – MosheElisha
2. Tengo un método que obtiene una cadena SQL y una Colección
@user: Con respecto a 1; como ya he mencionado, JDBC es un intento de estandarizar la interacción con una base de datos, pero cada implementación de base de datos tiene su propia forma de hacer las cosas. Por ejemplo, he oído que Oracle se queja si no se proporciona un tipo apropiado al establecer NULL. Por lo tanto, JDBC requiere que especifique el tipo, si la implementación subyacente de JDBC lo pasa a la base de datos es otra cosa. No se puede evitar si un protocolo de cable de base de datos en particular decide que se pasen los tipos al establecer valores NULL, por lo que no tiene sentido razonar con eso. –