Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java添加新对象(H2数据库)_Java_Database_H2 - Fatal编程技术网

Java添加新对象(H2数据库)

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

我在向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> 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);