Postgresql with java:query在插入

时间:2015-07-06 05:40:55

标签: java postgresql jdbc

我写了一个小程序来管理我的视频集。

/*
insert new data set into the table
*/
int next = 0;
rs = st.executeQuery("Select max(category_id) from category;");
if (rs.next()) {
    next = rs.getInt(1) + 1;
    System.out.println(next);
}
String query = "INSERT INTO category VALUES (" + next + ", 'Mystics', now());";
rs = st.executeQuery(query);
//on this place is the exception thrown
// this will not execute anymore
rs = st.executeQuery("DELETE FROM category WHERE name = 'Mystics';"); 

程序可以在表上进行选择,进行连接但是插入麻烦。 我尝试在我的表中插入一些新数据(请参阅Java代码)。在第二次测试之后,输出显示数据已插入。但是在Insert之后抛出异常。 1& 2是昨天和今天的测试。 (3)已插入但尚未选择。

1   Mystics 2015-07-05
2   Mystics 2015-07-06
3
org.postgresql.util.PSQLException: query produced no result.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:287)
at postgre_java.Zetcode.main(Zetcode.java:55)
你有什么建议吗?

3 个答案:

答案 0 :(得分:0)

在Java中,您使用executeQuery作为SELECT语句或其他返回内容的语句。如果您要执行INSERTUPDATEDELETE而不返回任何内容,则应使用executeUpdate()

答案 1 :(得分:0)

不要使用read语句操作数据! 如果要在db中插入,更新,删除数据

Statement stmt = conn.createStatement();
stmt.executeUpdate(SQL);

executeQuery返回结果集,但INSERT,UPDATE,DELETE都可以返回的是受影响行的数量,这就是executeUpdate返回的内容。

永远,永远,永远不要* 100在SQL中使用字符串连接使用Prepared语句!

答案 2 :(得分:0)

Statement#executeUpdate()用于此目的

String query = "INSERT INTO category VALUES (" + next + ", 'Mystics', now());";
int noOfRows= st.executeQuery(query)

但它不会返回ResultSet,而是会影响您可以存储到Integer

的行数

此外,您极易受Sql injection攻击,请尝试使用PreparedStatements来保护您的代码