首页 > 解决方案 > 使用 JDBC 和 Postgres 存储日期值

问题描述

我使用 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 编辑器中进行查询,它可以正常工作。

标签: javasqlpostgresqljdbc

解决方案


数据库中日期列的数据类型是什么?它是否以日期格式或字符串存储日期?如果它以日期格式存储日期,您应该将从 JDateChooser 获得的日期转换为 java.sql.Date。您必须这样做,因为 JDateChooser 返回 java.util.Date 并且数据库应该使用 java.sql.date。尝试像这样转换它:

java.util.Date datum = jDateChooser1.getDate();
java.sql.Date sqldate = new java.sql.Date(datum.getTime());

推荐阅读