我有一个简单的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
因此,我添加了print语句以查看其试图执行的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')
用引号引起来。这是因为我创建了预准备语句的方式吗?还是我有其他问题?输出对我来说似乎很模糊
这是令牌表的外观
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
)
我有一个简单的SQL语句,我想通过字符串tokenInsQ =“ INSERT INTO pitweb.tokens(token_user_id,token_token,token_valid,token_refresh)(?,?,?,?)”尝试{...
toekn_refresh中也有错字,toekn_user_id也有错字。
列名toekn_user_id中有一个错字。在插入语句中,您已使用token_user_id
,而在DDL中,它是toekn_user_id