【问题标题】:Java: insert a date within a Mysql databaseJava:在 Mysql 数据库中插入日期
【发布时间】:2014-10-15 04:48:18
【问题描述】:

我正在尝试将 java 与 mysql 连接,但我遇到了插入查询的下一个问题,例如,如果我输入日期 1995-04-16,日期的值会不断减去它们自己,它将尝试输入数据库中的值 1975。

我正在使用的代码是下一个:

public void insertIntoUsuario() {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    try {
        System.out.println("Ingrese su cedula: ");
        int cedula = scan.nextInt();
        System.out.println("Ingrese sus nombres: ");
        String nombres = scan.next();
        System.out.println("Ingrese sus apellidos: ");
        String apellidos = scan.next();
        System.out.println("Ingrese la fecha de nacimiento: ");
        String date = scan.next();
        java.sql.Date sqlDate = new java.sql.Date(format.parse(date).getTime());

        System.out.println("Ingrese su ingreso mensual: ");
        float ingresos_mensuales = scan.nextFloat();
        System.out.println("Ingrese un nombre de usuario: ");
        String nombre_usuario = scan.next();
        System.out.println("Ingrese una pass virtual: ");
        String pass_virtual = scan.next();
        System.out.println("Admin: por defecto es 0");
        int is_admin = 0;
        System.out.println("Visita: ");
        int first_visit = scan.nextInt();

        System.out.println(sqlDate + "f");

        st.executeUpdate("insert into usuario (cedula, nombres, apellidos, fecha_nacimiento, ingresos_mensuales, nombre_usuario, pass_virtual, is_admin, first_visit) VALUES ('"
                + cedula
                + "','"
                + nombres
                + "','"
                + apellidos
                + "',"
                + sqlDate
                + ",'"
                + ingresos_mensuales
                + "','"
                + nombre_usuario
                + "','"
                + pass_virtual
                + "','"
                + is_admin
                + "','" + first_visit + "') ");
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

【问题讨论】:

  • 使用preparedstatement。
  • + sqlDate + + sqlDate.toString() + 相同...这不是您想要的,请参阅之前的评论以获取解决方案

标签: java mysql sql date


【解决方案1】:

在 String 中附加 sqlDate 会将其创建为 String,这就是问题所在。

有两种可能的解决方案

  1. 您可以使用Prepared Statement

  1. 如果您想坚持声明,只需将您的日期留在字符串中并在查询中解析它,例如 关注

    st.executeUpdate("插入 usuario (cedula, nombres, apellidos, fecha_nacimiento, ingresos_mensuales, nombre_usuario, pass_virtual, is_admin, first_visit) VALUES ('" + 雪松 + "','" + 名词 + "','" + apellidos + "', to_char(" + 日期 + ",'yyyy-mm-dd'),'" + ingresos_mensuales + "','" + nombre_usuario + "','" + pass_virtual + "','" + is_admin + "','" + first_visit + "') ");

【讨论】:

  • to_char 需要与特定版本的mysql一起使用吗?我试过了,它说这个功能不存在顺便说一句非常感谢你
【解决方案2】:

使用 PreparedStatement 如下:

public class DateExample
    { 
        public static void main(String args[]) 
        {
            String source="1995-04-16";              
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");                       
            java.sql.Date d=(Date) format.parse(source);             
            Class.forName("com.mysql.jdbc.Driver");        
            Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/employee", "root", "root");   
            PreparedStatement ps=con.prepareStatement("insert into table values(?)");   
            java.sql.Date d= new java.sql.Date(format.parse(source).getTime());       
            ps.setDate(1,d);    
            ps.executUpdate();
        }
    }

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2012-02-18
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多