Дата Java для MySql DateTime - PullRequest
       4

Дата Java для MySql DateTime

0 голосов
/ 24 ноября 2011

каждое тело. Я получаю эту ошибку: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '14:37:41)' at line 1 для этого куска кода

       public String addName() {
    // TODO Auto-generated method stub
    try {
        java.util.Date dt = new java.util.Date();
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");

        String currentTime = sdf.format(dt);



        String name = "RandomName";

        Connection connect = DriverManager.getConnection(
                "jdbc:mysql://localhost", "ericman", "ericman");
        Statement stat = (Statement) connect.createStatement();
        String insert = "INSERT INTO `bookcatalog`.`puch` (`name`, `time`) VALUES ('"
                + name + "', " + currentTime + ")";
        stat.executeUpdate(insert);

    } catch (Exception e) {
        System.out.println(e);
    }
    return "Name Updated";
}

Любое предположение о том, почему это происходит, я сосу на структурированный язык, чтобы вы знали:)

Ответы [ 5 ]

5 голосов
/ 24 ноября 2011

Использование PreparedStatement.

String insert = "INSERT INTO `bookcatalog`.`puch` (`name`, `time`) VALUES (?,?)";
PreparedStatement ps=connect.prepareStatement(insert);
ps.setString(1,name);
ps.setTimeStamp(2,TimeStamp.valueOf(currentTime));
ps.executeUpdate();
3 голосов
/ 24 ноября 2011

Вам не хватает ' символов вокруг вашего currentTime в операторе вставки.

Тем не менее, вы действительно должны использовать подготовленный оператор для таких вещей, чтобы защититься от атак SQL-инъекций.

1 голос
/ 24 ноября 2011

тьфу. Почему бы вместо этого не использовать PreparedStatement?

PreparedStatement stmt = connect.prepareStatement("INSERT INTO bookcatalog.puch(name, time) values ?,?");
stmt.setString(1, name);
stmt.setTimestamp(2, dt);
stmt.execute();

Это намного чище.

1 голос
/ 24 ноября 2011

Вам нужно инкапсулировать дату / время в вашем выражении INSERT с кавычками, как вы делаете с аргументом name?

1 голос
/ 24 ноября 2011

Попробуйте преобразовать строку в дату по str_to_date

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...