如何使用JDBC程序将null值设置/插入到行的某一列中?

您可以通过两种方式将空值插入SQL中的表:

  • 将NULL值直接插入所需的列中,如下所示:

Insert into SampleTable values (NULL);
  • 将''用作null

Insert into SampleTable values (NULL);

使用PreparedStatement对象将数据插入表中时,可以使用PreparedStatement接口的setNull()方法将空值设置为列。

pstmt.setNull(parameterIndex, sqlType);

示例

假设我们在数据库中有一个名为cricketers_data的表,其内容如下:

+------------+------------+---------------+----------------+-------------+
| First_Name | Last_Name  | Date_Of_Birth | Place_Of_Birth | Country     |
+------------+------------+---------------+----------------+-------------+
| Shikhar    | Dhawan     | 1981-12-05    | Delhi          | India       |
| Jonathan   | Trott      | 1981-04-22    | CapeTown       | SouthAfrica |
| Kumara     | Sangakkara | 1977-10-27    | Matale         | Srilanka    |
| Virat      | Kohli      | 1987-04-30    | Delhi          | India       |
| Rohit      | Sharma     | 1987-04-30    | Nagpur         | India       |
+------------+------------+---------------+----------------+-------------+

接下来的JDBC程序连接到数据库,并在其中插入一个新行,并将其出生位置的值设置为NULL。

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Types;
public class InsertingNull {
   public static void main(String args[])throws Exception {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/mydatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //创建一个Statement对象
      Statement stmt = con.createStatement();
      //将值插入表
      String query = "INSERT INTO cricketers_data VALUES (?, ?, ?, ?, ?)";
      //创建一个Prepared Statement对象
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "Ravindra");
      pstmt.setString(2, "Jadeja");
      pstmt.setDate(3, new Date(597396086000L));
      //为列设置空值
      pstmt.setNull(4, Types.NULL);
      pstmt.setString(5, "India");
      pstmt.execute();
      System.out.println("Record inserted");
   }
}

输出结果

Connection established......
Record inserted......

如果检索cricketers_data表的内容,则可以观察到具有空值的新插入的记录。

mysql> select * from cricketers_data;

+------------+------------+---------------+----------------+-------------+
| First_Name | Last_Name  | Date_Of_Birth | Place_Of_Birth | Country     |
+------------+------------+---------------+----------------+-------------+
| Shikhar    | Dhawan     | 1981-12-05    | Delhi          | India       |
| Jonathan   | Trott      | 1981-04-22    | CapeTown       | SouthAfrica |
| Lumara     | Sangakkara | 1977-10-27    | Matale         | Srilanka    |
| Virat      | Kohli      | 1987-04-30    | Delhi          | India       |
| Rohit      | Sharma     | 1987-04-30    | Nagpur         | India       |
| Ravindra   | Jadeja     | 1988-12-06    | NULL           | India       |
+------------+------------+---------------+----------------+-------------+
6 rows in set (0.00 sec)