Проблема с запросом к базе данных - PullRequest
0 голосов
/ 12 марта 2012

Относительно плохо знаком с использованием базы данных, и по какой-то причине я не могу заставить работать это 'execute'.

statment2.execute("insert into table Value (" + int + "," + date + "," + int + ",'" + string + "')");

Я получаю ошибку "пропущена запятая".Дата указывается в качестве даты только в этом конкретном поле.

Я настроил ее следующим образом

Date date = new Date();
date.setMonth(month);
date.setYear(year);
date.setDate(weekStart); //weekStart is always monday

Нужно ли использовать просто старую дату или date.toString?Я собирался использовать Календарь, но я не знаю, как установить дату в БД с помощью объекта Календарь.Я не видел метод "gety / m / d".

Итак, проблема в моем запросе или я неправильно использую объект Date для установки даты в базе данных?

Изменить:

Попробовал ответ, получил неправильный формат - Ожидаемая дата получил номер.Попытка

sqlDate.valueOf(dateString I created)
sqlDate.toString()
sqlDate

Использование подготовленного состояния не исправит это, не так ли?Я понимаю, что это должно быть лучше по соображениям безопасности.

1 Ответ

2 голосов
/ 12 марта 2012

Во-первых, вы должны использовать PreparedStatement для вставки значений в ваш запрос.Это имеет много преимуществ, в том числе позволяет избежать проблем SQL-инъекция .Если вы используете PreparedStatement, вы будете избегать ошибок, которые вы видите сейчас.Ваш код, использующий PreparedStatement, будет выглядеть примерно так:

    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getConnection();
      String query = "insert into table (column1,column2,column3,column4) values(?, ?, ?,?)";

      pstmt = conn.prepareStatement(query); 
      pstmt.setInt(1, 1); 
      pstmt.setDate(2, sqlDate); 
      pstmt.setInt(3, 3); 
      pstmt.setString(3, "test"); 
      pstmt.executeUpdate();
    } catch (Exception e) {
      //log the error messages log.error(e,e);
      //throw the actual exception upstream
    } finally {
      pstmt.close();
      conn.close();
    }

Я не уверен, что вы имели в виду под датой «БД».Если вам нужен объект sql date, вы можете преобразовать объект java.util.Date в объект java.sql.Date следующим образом:

java.util.Date date = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...