我正在尝试插入我拥有的数据库,我想通过参数这样做。我正在使用java连接到postgres数据库。
我可以很好地连接到数据库。我知道因为我可以看到我正在使用的各种操作,我可以看到,并更新我的数据库中的现有行。我在使用INSERT时遇到问题。
我有以下内容:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void errorInput()
{
fprintf(stderr, "\nYou have received this message due to an error. \n");
fprintf(stderr, "Please type 'filetype <file>' to properly execute the program.\n");
fprintf(stderr, "Thank you and have a fine day! \n\n");
exit(0);
}
int main(int argc, char *argv[])
{
char command[128];
if (argc == 2)
{
strcpy(command, "file ");
strcat(command, argv[1]);
system(command);
}
else
{
errorInput();
}
return 0;
}
我将它们初始化:
private String _update_rentals = "INSERT into rentals (cid, mid) values (?,?)";
private PreparedStatement _update_rentals_statement;
private String _update_movie_status = "UPDATE Movie SET checkedout = true WHERE mid = ?";
private PreparedStatement _update_movie_status_statement;
和
_update_movie_status_statement = _customer_db.prepareStatement(_update_movie_status);
_update_rentals_statement = _customer_db.prepareStatement(_update_rentals);
我在两个executeQuery()调用中都出错了。由于某种原因,我得到以下错误:
while (movieAvail.next()){
System.out.println(movieAvail.getBoolean(1));
if (movieAvail.getBoolean(1) == false){
//Do chekcout
_update_rentals_statement.clearParameters();
_update_rentals_statement.setInt(1, cid);
_update_rentals_statement.setInt(2, mid);
_update_rentals_statement.executeQuery();
_update_movie_status_statement.clearParameters();
_update_movie_status_statement.setInt(1, mid);
_update_movie_status_statement.executeQuery();
System.out.println("Enjoy your movie!");
}
}
我查看了其他帖子,我相信我正在遵循插入/更新的语法,所以也许我忽略了这一点。
这是更大代码库的所有部分,因此我不想包含这些代码片段所包含的方法。但这些是与此代码相关的独立实例。
答案 0 :(得分:3)
通常,当您执行query
时,您愿意从数据库中检索某种信息。执行SELECT
查询时通常会出现这种情况。但是,对于INSERT
和UPDATE
语句,您不是查询数据库,而只是执行更新或插入新行。在PreparedStatement
的文档中,您可以看到在尝试调用executeQuery
时,在哪些情况下会引发异常:
抛出:SQLException - 如果发生数据库访问错误;这种方法 在关闭的PreparedStatement上调用,或者SQL语句不调用 返回一个ResultSet对象
因此,在您的情况下,问题是您的语句不会返回ResultSet
。您应该使用execute
或executeUpdate
代替。前者只是执行更新,而后者执行相同操作,但也返回受影响的行数。
答案 1 :(得分:1)
我认为主要问题是您正在调用executeQuery(),它希望返回结果,但Insert / Update不是查询而且不会返回结果。尝试只调用execute()。