Java SQL столбец ошибки имеет тип целое число, но выражение имеет тип символа меняется

1

Я подготовил выражение sql:

PreparedStatement insert_query = db.prepareStatement(String.format(INSERT_QUERY, table, 
                              columns.toString(), placeholder));
System.out.println(insert_query);

Результат:

INSERT INTO "article" (article_text, article_id, article_title) VALUES (?, ?, ?) RETURNING article_id

Затем я создаю список значений, задаю параметры и запрос на вставку execure:

ArrayList<String> values = new ArrayList<String>(); -- > is [New CONTENT, 4, New TITLE]
for (int i = 1; i <= values.size(); i++) {
            insert_query.setString(i, values.get(i-1));
        }
System.out.println(insert_query);
insert_query.executeUpdate();

У меня ошибка:

INSERT INTO "article" (article_text, article_id, article_title) VALUES ('New CONTENT', '4', 'New TITLE') RETURNING article_id

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "article_id" is of type integer but expression is of type character varying

Что-то не так с article_id. Я сказал, что это строка. Однако, когда я вручную пытаюсь выполнить этот запрос в PostgreSQL, все работает (((

Теги:
exception

2 ответа

2
Лучший ответ

Для article_id вы должны сделать insert_query.setInteger вместо insert_query.setString. Когда я проверяю ваше исключение, article_id отправляется в БД как String. Вот почему у вас есть это исключение.

  • 0
    Ага (((ты прав.
  • 0
    Я хочу, вы можете принять ответ;)
1

Лучшее решение, которое я нашел, - это список начальных значений как:

ArrayList<Object> values = new ArrayList<Object>();

И вставить в объект утверждения:

insert_query.setObject(i, values.get(i-1));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню