我正在使用 postgres 数据库并使用 JDBC。大多数事情都工作正常,但我在这段代码中遇到以下错误,似乎我没有正确使用 setString
/setDate
与$
风格的参数化查询。废话不多说,代码如下
(此处未初始化的变量已在此方法调用之前正确初始化)。
String query = "INSERT INTO \"tracks\" (\"artist\", \"album\", \"name\", \"listened_at\", \"created_at\", \"updated_at\", \"url\", \"image_url\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING \"id\"";
PreparedStatement statement = connection.prepareStatement(query);
java.sql.Date current = new java.sql.Date((new Date()).getTime());
java.sql.Date sqlListenedAt = new java.sql.Date(listenedAt.getTime());
statement.setString(1, artist);
statement.setString(2, album);
statement.setString(3, name);
statement.setDate(4, sqlListenedAt);
statement.setDate(5, current);
statement.setDate(6, current);
statement.setString(7, url);
statement.setString(8, imageUrl);
我收到的错误如下
org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
有没有办法通过 JDBC 正确使用 INSERT INTO "table"("column_a", "column_b") VALUES ($1, $2)
样式语句?
最佳答案
String query = "INSERT INTO tracks (artist, album, name, listened_at, created_at, updated_at, url, image_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id";
我认为你的其余代码可能没问题。两个基本评论:
- 仅当表/列名称是 SQL 中的保留字时,才需要引用它们。你写的方式真的很难读。
-JDBC 使用 ?用于占位符。我从来没有见过 1 美元等。也许这有效,但我不这么认为。
关于java - 如何使用 Postgres 的 $index 参数格式化 JDBCPreparedStatment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57151406/