Вставка даты в базу данных mysql с использованием java - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь вставить строку в базу данных mysql, используя Java jdb c связность ....

Вот мой код,

    public class DBPreparedStatement2 {


          public static void main(String[] args) throws ParseException{

         try {

             ArrayList<Student> slist = new ArrayList<Student>();


             String sDate1="1998/11/04";
             java.sql.Date dob=(java.sql.Date) new SimpleDateFormat("yyyy/MM/dd").parse(sDate1);

             slist.add(new Student(6,"James","Bond",dob,10,"jb@yahoo.com"));

             Class.forName("com.mysql.jdbc.Driver");
             Connection 
             con=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");

             String insertCommand="INSERT INTO STUDENTS VALUES(?,?,?,?,?,?)";

             PreparedStatement ps=con.prepareStatement(insertCommand);

             for(Student student:slist) {
                ps.setInt(1, student.id);
                ps.setString(2, student.firstName);
                ps.setString(3, student.lastName);
                ps.setDate(4, student.dob);
                ps.setInt(5, student.studClass);
                ps.setString(6, student.email);
        }

    }catch(ClassNotFoundException e1) {
        e1.printStackTrace();
    }catch(SQLException e) {
        e.printStackTrace();
    }

}

}

Когда я пытаюсь запустить код, я получаю исключение приведения к классу. Вот мой ученик. java class

    import java.sql.Date;

    public class Student {

        int id;
        String firstName;
        String lastName;
        Date dob;
        int studClass;
        String email;

    public Student() {  }

          public Student(int id,String firstName,String lastName,java.sql.Date dob,int studClass,String email) {

        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.dob = dob;
        this.studClass = studClass;
        this.email = email;
    }

}

, когда я запускаю код, я получаю следующую ошибку: Исключение в потоке "main" java .lang.ClassCastException : класс java .util.Date не может быть приведен к классу java. sql .Date (java .util.Date находится в модуле java .base загрузчика 'bootstrap'; java . sql .Дата находится в модуле java. sql загрузчика «платформа») в jdbcsample.DBPreparedStatement2.main (DBPreparedStatement2. java: 25)

1 Ответ

1 голос
/ 28 апреля 2020

Ваше исключение происходит из этой строки:

java.sql.Date dob = (java.sql.Date) new SimpleDateFormat("yyyy/MM/dd").parse(sDate1);

, так как анализ вернет java.util.Date, а не java.sql.Date. Вы не можете разыграть java.sql.Date, так как оба не связаны.

Вы можете избавиться от него, инстанцируя java.sql.Date с

java.sql.Date dob = new java.sql.Date(new SimpleDateFormat("yyyy/MM/dd")
                                              .parse(sDate1)
                                              .getTime());

, но я бы рекомендовал вам избегать используя java.util.Date, и вместо этого используйте:

  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
  LocalDate localDate = LocalDate.parse(sDate1, formatter);
  java.sql.Date dob   = java.sql.Date.valueOf(localDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...