JDBC,MySQL:从PreparedStatement中获取行数据

时间:2009-10-22 03:51:46

标签: java mysql jdbc prepared-statement

我正在使用以下设置:

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 [])方法的作用?

2 个答案:

答案 0 :(得分:2)

我认为您需要在返回的结果集

上调用next()
ResultSet keys = addresser.getGeneratedKeys();
int processId = -1;
if (keys.next())
{
  processId = keys.getInt("processId");
}

答案 1 :(得分:0)

在拨打next()

之前,您必须在ResultSet返回的getGeneratedKeys()上致电getInt()方法
ResultSet rs = addresser.getGeneratedKeys();
int processId = 0;
if (rs.next()) {
  processId = rs.getInt("processId");
}