количество выбранных типов не совпадало || неразрешимая дата «Вт 15 января 00:00:00 SGT 2013»

#json #spring #hibernate #web #hql

#json #весна #переход в спящий режим #веб #hql

Вопрос:

У меня ошибка, я не уверен, почему количество выбранных типов не соответствовало тем, что для вставки. У меня есть объект запроса с 3 значениями. billing_cycle, start_date и end_date. Я попытался добавить 0 при вставке, но все еще не работает.

ОБНОВЛЕНИЕ: Моя дата указана в строке. Это должен быть тип даты. Я изменил ВЫБОР на ЗНАЧЕНИЯ. Я получил новую ошибку: Неразрешимая дата: «Вт 15 января 00: 00:00 SGT 2013»

Мой метод вставки

     @Override
    @Transactional
    public void insertRequest(Request request) {
    
     try {
    DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd" );
    DateFormat inputFormat = new SimpleDateFormat("E MMM dd HH:mm:ss Z 
    yyyy");
    Date sdate = outputFormat.parse(request.getStart_date()) ;
    Date edate= outputFormat.parse(request.getEnd_date()) ;
    
    String sqlQuery;
    
        sqlQuery = "INSERT INTO Request "
                  "(billing_cycle, start_date, end_date) VALUES ("
                   
                  request.getBilling_cycle()  ", "
                  "'"  sdate  "', "
                  "'"  edate "')";
        Query query = entityManager.createQuery(sqlQuery);
        query.executeUpdate();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
  

Мои значения

 {
    "billing_cycle":"1", 
    "start_date":"Tue Jan 15 00:00:00 SGT 2013", 
    "end_date":"Thu Feb 14 00:00:00 SGT 2013"
}
  

Моя сущность

 @Entity
@Table(name="request")
public class Request {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="request_id")
    private int request_id;

    @Column(name="billing_cycle")
    private int billing_cycle;

    @Column(name="start_date", columnDefinition="Date")
    private String start_date;

    @Column(name="end_date", columnDefinition="Date")
    private String end_date;
  

Ошибка:

 Unparseable date: "Tue Jan 15 00:00:00 SGT 2013"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
  

Структура базы данных:
введите описание изображения здесь

Комментарии:

1. Пожалуйста, добавьте свой код и трассировку стека в виде текста.

2. Я обновил его, проверьте

3. createQuery Метод используется для создания JPQL запросов, и я думаю, что он не поддерживает INSERT инструкцию. Также, почему вам нужно использовать INSERT оператор, когда у вас уже есть Request объект. Можно попробовать использовать entityManager.persist(request)

Ответ №1:

В определении вашего атрибута request_id я вижу, что вы выбрали ПОКОЛЕНИЕ.АВТОМАТИЧЕСКАЯ стратегия. Итак, в вашем запросе на вставку вы должны сделать его нулевым.

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

 entityManager.persist(request);
  

В вашей схеме БД используется дата. Здесь вы найдете разницу между ДАТОЙ и DATETIME

ДАТА: используется для значений с частью даты, но без части времени. MySQL извлекает и отображает значения ДАТЫ в формате ГГГГ-ММ-ДД. Поддерживаемый диапазон составляет от 1000-01-01 до 9999-12-31.

DATETIME: используется для значений, содержащих как части даты, так и времени. MySQL извлекает и отображает значения даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. Поддерживаемый диапазон составляет от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.

Комментарии:

1. Он все еще не работает: количество выбранных типов не соответствовало тем, которые были выбраны для вставки [ВСТАВИТЬ В запрос (request_id, billing_cycle, start_date, end_date) select (null, 1, ‘2013-01-15’, ‘2013-02-14’)

2. Обычно запрос на выбор в insert должен содержать таблицу, подобную этой: ВСТАВИТЬ В TABLE1(COL1, COL2, COL3), ВЫБРАТЬ COL1, COL2, COL3 Из TABLE2; В вашем случае вы должны изменить SELECT со ЗНАЧЕНИЯМИ

3. Спасибо. Я обновил его до ЗНАЧЕНИЙ, но я получил новую ошибку.

4. Добавьте свои атрибуты в java.sql.Date, которые устранят проблему

5. Можете ли вы предоставить нам структуру таблицы в БД?