Java prepiredStatement setInt добавляет кавычки в SQL - PullRequest
0 голосов
/ 10 марта 2020

У меня есть простой оператор SQL, который я хочу выполнить с помощью

        String tokenInsQ = "INSERT INTO pitweb.tokens (token_user_id,token_token,token_valid,token_refresh) (?,?,?,?)";
        try {
            PreparedStatement p = SQL.dbConnection.prepareStatement(tokenInsQ);
            p.setInt(1, r.getInt("user_id").intValue());
            p.setString(2, token.getString("token"));
            p.setTimestamp(3, (Timestamp)token.get("valid"));
            p.setTimestamp(4, (Timestamp)token.get("renew"));
            System.out.println(p);
            p.executeUpdate();      
            p.close();
        } 

Я ожидаю, что это будет работать нормально. Токен - это длинная строка, и r.getInt("user_id").intValue() возвращает 11. Я получаю ошибку:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
  Position: 82 

Поэтому я добавил оператор печати, чтобы увидеть SQL, который он пытается выполнить. Программа Prints.

INSERT INTO pitweb.tokens (token_user_id,token_token,token_valid,token_refresh) ('11','really long string ','2020-03-17 13:15:22.847000 -05:00','2020-03-14 13:15:22.847000 -05:00')

Я предполагаю, что моя проблема в том, что token_user_id ('11') в кавычках. Это из-за способа, которым я создал Подготовленное Заявление? или у меня другая проблема. вывод мне кажется расплывчатым

Вот как выглядит таблица токенов

CREATE TABLE pittweb.token
(
    token_id integer NOT NULL DEFAULT nextval('pittweb.token_token_id_seq'::regclass),
    toekn_user_id integer,
    token_valid timestamp without time zone,
    toekn_refresh timestamp without time zone,
    token_token text COLLATE pg_catalog."default",
    CONSTRAINT token_pkey PRIMARY KEY (token_id),
    CONSTRAINT token_toekn_user_id_fkey FOREIGN KEY (toekn_user_id)
        REFERENCES pittweb."user" (user_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

В toekn_refre sh также есть опечатка вместе с toekn_user_id.

1 голос
/ 10 марта 2020

В названии столбца toekn_user_id есть опечатка. В операторе вставки вы использовали token_user_id, а в DDL это toekn_user_id

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