【发布时间】:2018-07-27 12:16:04
【问题描述】:
我已经使用 java 与 NetBeans 制作了一个公式。
在那个公式中,我有一个字段 JDateChooser。问题是当我尝试将该值插入 Postgres 数据库时:
public void insertarDatos(Usuario u){
try {
String sql = "INSERT INTO usuario( dni, nombre, apellidos, correo, "
+ "telefono, usuario, clave, fecha, foto)\n"
+ "VALUES (?, ?, ?, ?, ?, ?, ?, '"+u.getFecha()+"', ?);";
PreparedStatement ps=con.con.prepareStatement(sql);
ps.setString(1, u.getDni());
ps.setString(2, u.getNombre());
ps.setString(3, u.getApellidos());
ps.setString(4, u.getCorreo());
ps.setString(5, u.getTelefono());
ps.setString(6, u.getUsuario());
ps.setString(7, u.getClave());
ps.setBinaryStream(8, u.getFis(), u.getLongitudBytes());
boolean ejecucion=con.ejecutarSQL(ps);
if(ejecucion==true){
JOptionPane.showMessageDialog(null, "usuario correctamente"
+ "registrado");
}else if(ejecucion==false){
JOptionPane.showMessageDialog(null, "error insertar usuario");
}
} catch (Exception e) {
System.out.println("error al insertar: " + e);
}
}
然后Java给我一个这样的错误:
error al ejecutar: org.postgresql.util.PSQLException: ERROR: la sintaxis de entrada no es válida para Tipo date: «null»
但是,如果我在 Postgres 编辑器中进行查询,它可以正常工作。
【问题讨论】:
-
不要不将日期(或数字)作为字符串传递。传递
LocalDate的实例(使用setObject())或至少使用setDate()的java.sql.Date的实例 -
当您(正确地)为所有其他值使用参数占位符时,为什么要将
u.getFecha()嵌入到 SQL 命令文本中?
标签: java sql postgresql jdbc