Java 错误:列索引超出范围:1,列数:0

Java 错误:列索引超出范围:1,列数:0,java,postgresql,insert,Java,Postgresql,Insert,我试图解决向Postgresql表中插入数据的问题 我看了这个类似的问题,但它并没有解决我的问题 以下是获取错误的代码部分: String query = "INSERT INTO reviews (nbstar, body, author, product_id) VALUES($1,$2,$3,$4)"; PreparedStatement prepareStatement = connection.prepareStatement(query); prepareStatement.se

我试图解决向Postgresql表中插入数据的问题

我看了这个类似的问题,但它并没有解决我的问题

以下是获取错误的代码部分:

String query = "INSERT INTO reviews (nbstar, body, author, product_id) VALUES($1,$2,$3,$4)";

PreparedStatement prepareStatement = connection.prepareStatement(query);
prepareStatement.setInt(1, nbStar);
prepareStatement.setString(2, body);
prepareStatement.setString(3, author);
prepareStatement.setInt(4, productId);

boolean executed = prepareStatement.execute();
我尝试了几次更改索引号,但仍然出现相同的错误

下面是该表的模式:

有人能给我一个建议吗


谢谢。

在sql查询中,您希望插入5个字段(id、nbstar、body、author、product\u id)的值,但只有4个值($1、$2、$3、$4)


更新以下已编辑的问题,只需按如下方式修改查询:

VALUES($1,$2,$3,$4) 


对我来说,问题是在查询字符串的末尾有一个分号。比如:

String query = "INSERT INTO reviews (nbstar, body, author, product_id) VALUES(?,?,?,?);";
注意
附加到查询字符串的末尾。解决方法是,移除它:

String query = "INSERT INTO reviews (nbstar, body, author, product_id) VALUES(?,?,?,?)";

第一个字段是serial(auto increment id)类型,我只需要插入以下四个值,这意味着第一个字段自动接收值将值($1、$2、$3、$4)更改为值(?,,,?)时,答案是好的。JDBC使用
作为参数占位符。有关详细信息,请参阅本教程:如果
的引用方式类似于“?”,
例如,其中ad_date>=”?“
不正确,也会导致相同的问题
String query = "INSERT INTO reviews (nbstar, body, author, product_id) VALUES(?,?,?,?)";