Statement中的executeUpdate(String,int)方法总是返回1

时间:2013-05-16 07:34:57

标签: java mysql jdbc

有人可以告诉我为什么下面的方法(executeUpdate)总是返回1,即使我已经指定返回生成的密钥吗?我想在generatedKey变量中获取生成的密钥。它适用于使用PreparedStatement的{​​{1}},但我希望使用getGeneratedKeys进行此操作。

Statement

根据 public int testQuery(Connection con) { int generatedKey = 0; try { Statement statement = con.createStatement(); generatedKey = statement.executeUpdate("INSERT INTO profile (fullname) VALUES ('Visruth CV')", Statement.RETURN_GENERATED_KEYS); } catch (SQLException e) { e.printStackTrace(); } finally { try { con.close(); } catch(Exception ex) { ex.printStackTrace(); } } System.out.println("generated key : "+generatedKey); return generatedKey; } 的文档,它说:

executeUpdate(String sql, int autoGeneratedKeys)

2 个答案:

答案 0 :(得分:6)

它在你粘贴的javadoc中说:

returns: either (1) the row count for SQL Data Manipulation Language or (2) 0 for SQL statements that return nothing

它返回1因为你总是只插入1个值。它不会返回生成的密钥。

要获取生成的密钥,您需要运行以下行:

rs = stmt.getGeneratedKeys()

You can read a full tutorial about this concept here.

答案 1 :(得分:2)

如果您阅读文档的Returns部分,则不会说它会返回生成的密钥。它返回行数或0。

执行语句后使用getGeneratedKeys()获取生成的密钥。