0
我在製作這個工程時遇到了一些麻煩。我有一個表,其中三個字段可以是NULL:alumno,fechaInicio和fechaDefensa。我將可能的空值傳遞給另一種方法來檢查它們。'無法在NULL值更新行時設置參數'
public static void actualizarProyecto(int id, String nombre, String descripcion, String alumno, String profesor, String fechaInicio, String fechaDefensa, String convocatoria, int finalizado, int disponible, float nota) {
consulta = "UPDATE proyectos SET nombre='" + nombre + "', descripcion='" + descripcion + "', alumno='" + alumno + "', profesor='" + profesor + "', fecha_inicio='" + fechaInicio + "',"
+ "fecha_defensa='" + fechaDefensa + "', convocatoria='" + convocatoria + "', "
+ "finalizado=" + finalizado + ", disponible=" + disponible + ", nota='" + nota + "' WHERE id=" + id + "";
CONEXION.actualizarProyecto(consulta, alumno, fechaInicio, fechaDefensa);
}
因爲我不能設置的值直接NULL我有檢查,如果字段爲空或空的,然後將其設置爲空或不此第二方法。
public void actualizarProyecto(String consulta, String alumno, String inicio, String defensa) {
PreparedStatement state = null;
try {
state = conexion.prepareStatement(consulta);
if (alumno == null) {
state.setNull(3, Types.VARCHAR);
} else {
state.setString(3, alumno);
}
if ("".equals(inicio)) {
state.setNull(4, Types.DATE);
} else {
state.setString(4, inicio);
}
if ("".equals(defensa)) {
state.setNull(5, Types.DATE);
} else {
state.setString(5, defensa);
}
state.executeQuery();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Error al insertar el contenido en la BBDD.", JOptionPane.ERROR_MESSAGE);
}
}
運行程序時,我得到Could not set parameter at position 3, parameter length is 0
我該如何解決這個問題?
謝謝。我在此之後嘗試過,但只使用'?'在可空值上。 – apeiron
如果您閱讀了SQL注入攻擊,您會看到爲什麼使用'?'所有參數都是一個好主意。 – Jason