java - 如何使用 Postgres 的 $index 参数格式化 JDBCPreparedStatment

标签 java postgresql jdbc

我正在使用 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/

相关文章:

java - 连接Java和Mysql

java - 字符串的简单时间解析

java - 当我尝试添加到树集中时,它返回空白

postgresql - 重复计算轨道数

postgresql - 如何删除未使用的序列?

database - PostgreSQL 图形安装程序 : The specified service does not exist as an installed service

java - 检查字符串是否具有特定格式?

java - 如何诊断我们的 java IP 多播应用程序?

java - 我无法将jsp页面连接到mysql服务器

java - 如何通过Java中的ssh隧道连接到MySQL数据库?