无法在 postgres 的 bytea 字段中插入 null

Pou*_*ami 5 postgresql blob jdbc

我无法在数据类型为 bytea(blob) 的 postgres 数据库中插入空值。这是我的 Java 代码片段:

ps.setNull(++index, java.sql.Types.BLOB);
Run Code Online (Sandbox Code Playgroud)

bytea 列是一个可为空的列。以下是表格说明。

testdb=# \d+ plan 
                           Table "public.plan"
   Column    | Type  | Modifiers | Storage  | Stats target | Description 

-------------+-------+-----------+----------+--------------+-------------

description | bytea |           | extended |              | 

Has OIDs: no
Run Code Online (Sandbox Code Playgroud)

我收到以下异常 java.sql.BatchUpdateException: Batch entry 11 INSERT INTO public.plan(description) VALUES(NULL) was aborted。调用 getNextException 以查看原因。

a_h*_*ame 6

Postgres 有两种不同的“BLOB”类型:bytea,本质上是 SQL 标准定义的BLOB. 而“大对象”或多或少是指向二进制存储的“指针”(它仍然存储在数据库中)。

Postgres JDBC 一直将“大对象”视为等同于BLOB(我从未理解),因此ps.setNull(++index, java.sql.Types.BLOB);使驱动程序认为您正在处理“大对象”(又名“oid”)列。

要克服这个问题,请使用

ps.setNull(++index, Types.OTHER);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

ps.setObject(++index, null);
Run Code Online (Sandbox Code Playgroud)