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 执行获取回行数据的主要内容,如果未能解决你的问题,请参考以下文章

JDBC-3(Transcation) ****

JDBC操作数据库之连接数据库

使用PreparedStatement接口实现增删改操作

怎样从《mysql》官网下载jdbc驱动?

使用 JDBC 从 MySQL 获取图像

JDBC、MySQL:从 PreparedStatement 执行获取回行数据