Java添加新对象(H2数据库)
我在向sql表添加新对象时遇到ID问题 我的超类有name和id+2个构造函数:Java添加新对象(H2数据库),java,database,h2,Java,Database,H2,我在向sql表添加新对象时遇到ID问题 我的超类有name和id+2个构造函数: public Car(String name ) { this.name = name ; } public Car(long id, String name ){ this.id = id; this.name = name ; } 子类还有两个构造函数,分别是id和no 从H2中,我读到如下内容: public static List<Car> addAllC
public Car(String name ) {
this.name = name ;
}
public Car(long id, String name ){
this.id = id;
this.name = name ;
}
子类还有两个构造函数,分别是id和no
从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;
}
问题是我进口了5辆车。ID从1到5。但当我添加一辆新车时,它从id 40开始,并且总是增加1。如果我进口10辆汽车,我将从40辆增加到50辆。如果我删除这10辆车,它也将继续从id 50等等。我以为h2中的id会自动递增。不要期望主键id是连续的 主键应该是连续的,这是一个常见的误解。唯一的要求是PK应该具有唯一的值,以便它可以充当行标识符 如果值一个接一个地增长,或者如果存在间隙,或者如果数字是随机的,那么这并不重要。只要它们是唯一的,您的应用程序就会运行良好 数据库引擎通常会为不同的线程缓冲数字段,因此不同的用户在添加新行时不会互相攻击。副作用是,您将在表中看到未使用值的间隙。同样,这是非常不重要的
同样典型的是序列中的数字不可循环使用。以后可以删除行,但这些行的标识号不会再次分配给新行。同样,这意味着表的行号中可能会出现间隙,这并不重要。不要期望主键ID是连续的 主键应该是连续的,这是一个常见的误解。唯一的要求是PK应该具有唯一的值,以便它可以充当行标识符 如果值一个接一个地增长,或者如果存在间隙,或者如果数字是随机的,那么这并不重要。只要它们是唯一的,您的应用程序就会运行良好 数据库引擎通常会为不同的线程缓冲数字段,因此不同的用户在添加新行时不会互相攻击。副作用是,您将在表中看到未使用值的间隙。同样,这是非常不重要的
同样典型的是序列中的数字不可循环使用。以后可以删除行,但这些行的标识号不会再次分配给新行。同样,这意味着表格行号中可能会出现空白,这并不重要。您介意通过更新主帖子来显示表格的DDL吗?我不知道如何从H2获取DDL。我会试着这样做。你介意通过更新主帖子来显示表的DDL吗?我不知道如何从H2获取DDL。谢谢,我问过我的一个朋友,他也这么说,但我不知道。谢谢,我问过我的一个朋友,他也这么说,但我不知道。
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);