美文网首页
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