拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用JDBC 将Null 插入整数列

使用JDBC 将Null 插入整数列

白鹭 - 2021-11-19 2306 0 2

一、简介

在本文中,我们将研究如何**使用普通 JDBC 在我们的数据库中存储null**值。我们将首先描述使用null值的原因,然后是几个代码示例。

2. 使用null

null是一个超越所有编程语言的关键字。它代表了一种特殊的价值。普遍认为null没有价值或它不代表任何东西。在null意味着在硬盘上保留了空间。如果有合适的值可用,我们可以将其存储在该空间中。


**另一种看法是, null等于零或一个空字符串**。特定上下文中的零或空白字符串可能具有含义,例如,仓库中的零个项目。此外,我们可以对这两个值sum或concat但是这些操作在处理null时没有意义。


在我们的数据中使用null值来表示特殊情况有很多优点。这些优点之一是大多数数据库引擎sum或avg等内部函数中null值。另一方面,当null时,我们可以编写特殊操作来减少缺失值。


将null带到表中也会带来一些缺点。在编写处理包含null值的数据的代码时,我们必须以不同的方式处理该数据。这可能会导致代码难看、混乱和错误。此外, null值在数据库中可以具有可变长度。 null存储在Integer和Byte列中将具有不同的长度。


3. 代码实现

对于我们的示例,我们将使用带有 H2 内存数据库的简单 Maven 模块。不需要其他依赖项。


首先,让我们创建名为Person的 POJO 类。这个类将有四个字段。 Id用作我们数据库的主键, name,和lastName,它们是字符串, age表示为Integer 。 Age不是必填字段,可以为null :

public class Person { private Integer id; private String name; private String lastName; private Integer age; //getters and setters

}

要创建反映此 Java 类的数据库表,我们将使用以下 SQL 查询:

CREATE TABLE Person (id INTEGER not null, name VARCHAR(50), lastName VARCHAR(50), age INTEGER, PRIMARY KEY (id));

完成所有这些之后,现在我们可以专注于我们的主要目标。要将null值Integer PreparedStatement接口中有两种定义的方法。

3.1.使用setNull方法

使用setNull方法,在执行 SQL 查询之前,我们始终确保我们的字段值为null 。这使我们在代码中具有更大的灵活性。


对于列索引,我们还必须为PreparedStatement实例提供有关基础列类型的信息。在我们的例子中,这是java.sql.Types.INTEGER 。


此方法仅为null值保留。对于任何其他,我们必须使用PreparedStatement实例的适当方法

@Test

public void givenNewPerson_whenSetNullIsUsed_thenNewRecordIsCreated() throws SQLException {

Person person = new Person(1, "John", "Doe", null); try (PreparedStatement preparedStatement = DBConfig.getConnection().prepareStatement(SQL)) {

preparedStatement.setInt(1, person.getId());

preparedStatement.setString(2, person.getName());

preparedStatement.setString(3, person.getLastName()); if (person.getAge() == null) {

preparedStatement.setNull(4, Types.INTEGER);

} else {

preparedStatement.setInt(4, person.getAge());

} int noOfRows = preparedStatement.executeUpdate();



assertThat(noOfRows, equalTo(1));

}

}

如果我们不检查getAge方法null并使用a null setInt方法,我们将得到NullPointerException 。

3.2. 使用setObject方法

setObject方法让我们在处理代码中丢失的数据时灵活性较低。我们可以传递我们拥有的数据,底层结构会将 Java Object类型映射到 SQL 类型。


请注意,并非所有数据库都允许在不指定 SQL 类型的情况下null例如,JDBC 驱动程序无法从null.


为了安全起见,最好将 SQL 类型传递给setObject方法:

@Test

public void givenNewPerson_whenSetObjectIsUsed_thenNewRecordIsCreated() throws SQLException {

Person person = new Person(2, "John", "Doe", null); try (PreparedStatement preparedStatement = DBConfig.getConnection().prepareStatement(SQL)) {

preparedStatement.setInt(1, person.getId());

preparedStatement.setString(2, person.getName());

preparedStatement.setString(3, person.getLastName());

preparedStatement.setObject(4, person.getAge(), Types.INTEGER); int noOfRows = preparedStatement.executeUpdate();



assertThat(noOfRows, equalTo(1));

}

}

4 结论

在本教程中,我们解释了一些基本的用法null数据库中值。然后我们提供了如何使用普通 JDBC Integer null值的示例。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *