【问题标题】:Java auto increment from baseJava从基数自动递增
【发布时间】:2021-04-24 10:37:53
【问题描述】:

就我而言,我有类和子类。问题是当我自动搜索我的函数增量 id 时。当我第一次点击搜索时,它上传了 5 个 ID,当我添加一个并返回搜索时,它上传了 5 个我有 +(5 个旧 + 1 个新)的 ID。然后,如果我想添加新的,它会给他 id 5+6 + 1 new = 13 id。

类 auto long 有 id 和 name:

    public static AtomicInteger idSequence = new AtomicInteger();

    public Car(String name) {
        this.id = (long)idSequence.incrementAndGet();
        this.name= name;
    }

子类:

 public OldCars(String name){
        super(name);
    }

从 H2 更新的功能:

  public static List<Car> uploadAllCars() throws SQLException, IOException {
        Connection connection= connectToDatabase();
        List<Car> listOfCars= new ArrayList<>();

    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM CARS");

    while(rs.next()){
        Long id = rs.getLong("id");
        String name= rs.getString("name");
     
        Car car= new Car(name);
        car.setId(id);
        listOfCars.add(car);

    }
    closeConnectionToDataBase(connection);

    return listOfCars;}

问题是如何在没有 id 总和的情况下停止自动递增和调用函数。我正在调用 uploadAllCars 函数来搜索每次特定的汽车,但它会立即自动增加。

编辑:我希望用户输入姓名(不是 id)

【问题讨论】:

  • 顺便说一下,我们通常让数据库引擎管理递增序列号并将其分配给每个新行。该杂务是数据库引擎的特色之一。您无需管理AtomicInteger 等。引擎可能比你或我做得更好。如果您使用的工具和应用程序不是这个特定的 Java 应用程序,那么 ID 生成将被普遍调用。如果您需要新生成的 ID,JDBC 为您提供了请求它们的工具。

标签: java h2 atomicinteger


【解决方案1】:

定义另一个从数据库中获取汽车的构造函数,如下所示:

public Car(String name, long id) {
        this.id = id;
        this.name = name;
}

用它代替new Car(name),所以new Car(name, id)

【讨论】:

  • 我不想让用户输入
  • 将其设为私有构造函数
  • 我希望用户输入名称而不是 id
  • 用户可以使用只有名称的 cunstructor,而您可以根据需要使用带有 id 的 cunstructor。它称为构造函数过载。
  • 但是我的子类扩展了 Car 类
猜你喜欢
  • 2020-07-04
  • 2017-04-02
  • 2021-07-12
  • 1970-01-01
  • 2016-03-07
  • 2011-01-04
  • 1970-01-01
  • 2023-02-10
  • 2016-02-20
相关资源
最近更新 更多