Java prepairedStatement setInt 在 SQL 中添加引号

标签 java prepared-statement

我有一个简单的 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();
        } 

我希望这能正常工作。 token 是一个长字符串,r.getInt("user_id").intValue() 返回 11。我不断收到的错误是

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

所以我添加了打印语句来查看它尝试执行的 SQL。程序打印。

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') 用引号引起来。这是因为我创建准备好的语句的方式吗?或者我有其他问题吗?输出对我来说似乎很模糊

这是 token 表的样子

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
)

最佳答案

toekn_refresh 以及 toekn_user_id 中都存在拼写错误。

关于Java prepairedStatement setInt 在 SQL 中添加引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623833/

相关文章:

java - 可以将 String 转换为枚举值吗?

php - mysqli_autocommit 是否适用于准备好的语句?

java - 在PreparedStatement中使用 "DEFAULT"值

PhpStorm PDO SQL 方言

mysql - SUM 值 - 当 de sum 等于 0 时输出错误

java - Spring中的线程命名

java - ByteBuffer - CompareTo 方法可能会出现分歧

java - JUnit + Powermock - new Date() - NullPointerException

java.lang.IllegalArgumentException : No enum constant found

mysql - 在golang中如何支持多种sql语法(mysql vs postgres)