java.sql.SQLException: Generated keys not requested. You need to ... 错误

来源:互联网 发布:windows ce应用小游戏 编辑:程序博客网 时间:2024/06/16 12:53

主要方法

/**
* 添加一条数据
* @param bean
*/
public void add(Category bean){
String sql=”insert into category values(null,?)”;
try (Connection connection = DBUtil.getConnction();
PreparedStatement preparedStatement=connection.prepareStatement(sql);
) {
preparedStatement.setString(1,bean.getName());
preparedStatement.execute();
//获得主键id号
ResultSet resultSet=preparedStatement.getGeneratedKeys();
if(resultSet.next()){
int id=resultSet.getInt(1);
bean.setId(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
}

错误详情

java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate(), Statement.executeLargeUpdate() or Connection.prepareStatement().

原因

从5.1.7版本之后的mysql-connector增加了返回GeneratedKeys的条件,如果需要返回GeneratedKeys,则PreparedStatement需要显示添加一个参数Statement.RETURN_GENERATED_KEYS。

PreparedStatement preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

修改代码

/**
* 添加一条数据
* @param bean
*/
public void add(Category bean){
String sql=”insert into category values(null,?)”;
try (Connection connection = DBUtil.getConnction();
//修改部分
PreparedStatement preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
) {
preparedStatement.setString(1,bean.getName());
preparedStatement.execute();
//获得主键id号
ResultSet resultSet=preparedStatement.getGeneratedKeys();
if(resultSet.next()){
int id=resultSet.getInt(1);
bean.setId(id);
}
} catch (SQLException e) {
e.printStackTrace();
}
}

成功运行。

阅读全文
1 0