JDBC、MySQL:从 PreparedStatement 执行获取回行数据
Posted
技术标签:
【中文标题】JDBC、MySQL:从 PreparedStatement 执行获取回行数据【英文标题】:JDBC, MySQL: getting back row data from PreparedStatement executes 【发布时间】:2009-10-22 03:51:46 【问题描述】:我正在使用以下设置:
public mysqlProcessWriter(Connection con) throws SQLException
String returnNames[] = "processId","length","vertices";
addresser = con.prepareStatement("INSERT INTO addressbook (length, vertices, activity) VALUES (?, ?, ?)", returnNames);
processId
对应地址簿表中的自增列。所以这个想法是:我有一个重复的插入,我得到了一些插入的内容+自动生成的 processId。但是,当我在执行准备好的语句后(在适当的值设置之后)尝试addresser.getGeneratedKeys().getInt("processId");
时,我得到一个“找不到列”SQLException。代码是
addresser.setInt(1, length);
addresser.setInt(2, vertices);
addresser.setDouble(3, activity);
addresser.executeUpdate();
int processId = addresser.getGeneratedKeys().getInt("processId");
在更新长度、顶点、活动的循环内。那么......什么给了?我是否误解了 prepareStatement(sqlstring, string[]) 方法的作用?
【问题讨论】:
【参考方案1】:我认为你需要在返回的结果集上调用 next()
ResultSet keys = addresser.getGeneratedKeys();
int processId = -1;
if (keys.next())
processId = keys.getInt("processId");
【讨论】:
好吧..我想我不是第一个...看起来我们俩可能都是正确的。【参考方案2】:在调用getInt()
之前,您必须在从getGeneratedKeys()
返回的ResultSet
上调用next()
方法
ResultSet rs = addresser.getGeneratedKeys();
int processId = 0;
if (rs.next())
processId = rs.getInt("processId");
【讨论】:
以上是关于JDBC、MySQL:从 PreparedStatement 执行获取回行数据的主要内容,如果未能解决你的问题,请参考以下文章