繁体   English   中英

Java 添加新的 object (H2 数据库)

[英]Java add new object (H2 database)

将新的 object 添加到 sql 表时,我遇到了 ID 问题。

我的超级 class 有 name 和 id + 2 个构造函数:

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

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

子类也有 2 个有 id 和没有的构造函数。

从H2我读到这样:

  public static List<Car> addAllCars() 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");
            Integer noOfDoors = rs.getInt("noOfDoors");        
            Car newCar= new Car(name, noOfDoors);
            newCar.setId(id);

            listOfCars.add(newCar);

        }

        closeConnectionToDataBase(connection);

        return listOfCars;

    }

当我添加新车时(用户输入名称和 noOfDoors,我应该得到新的 id)

 Connection connection= Database.connectToDatabase();

        PreparedStatement query=
                veza.prepareStatement("INSERT INTO CAR(name,noOfDoors) VALUES(?,?) ");

        query.setString(1, cars.getName());
        query.setInt(2, cars.getNoOfDoors());
     

        query.executeUpdate();
        
        Database.closeConnectionToDataBase(connection);

问题是我进口了 5 辆车。 ID 从 1 到 5。但是当我添加一辆新车时,它从 id 40 开始并且总是增加 1。如果我进口 10 辆汽车,我会将 go 从 40 到 50。如果我删除这 10 辆汽车,它也将从 id 50 继续等等。 我认为 h2 中的 id 会自动递增。

不要期望主键 ID 是连续的。

主键应该是顺序的,这是一个常见的误解。 唯一的要求是 PK 应该具有唯一值,因此它可以充当行标识符。

如果值一个一个地增长,或者如果有差距,或者如果数字是随机的,这并不重要。 只要它们是独一无二的,您的应用程序就会运行良好。

数据库引擎通常会为不同的线程缓冲数字段,因此不同的用户在添加新行时不会互相踩踏。 副作用是您会在表中看到未使用值的间隙。 同样,这非常不重要。

同样典型的是序列中的数字不会被回收。 您可以稍后删除行,但这些行的标识符号不会再次分配给新行。 同样,这意味着表格的行号中可能会出现间隙,这非常不重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM