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