美文网首页
java.sql.SQLException: Generated

java.sql.SQLException: Generated

作者: 风雨雾凇 | 来源:发表于2018-01-14 12:12 被阅读0次

主要方法

/**
* 添加一条数据
* @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();
}
}

成功运行。

相关文章

网友评论

      本文标题:java.sql.SQLException: Generated

      本文链接:https://www.haomeiwen.com/subject/zujkoxtx.html