[英]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.