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

时间:2015-12-07 07:05:37

标签: postgresql jdbc blob

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

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

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

description | bytea |           | extended |              | 

Has OIDs: no

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

{{1}}

我收到以下异常 java.sql.BatchUpdateException:批处理项11 INSERT INTO public.plan(description)VALUES(NULL)已中止。调用getNextException以查看原因。

2 个答案:

答案 0 :(得分:3)

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

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

要解决此问题,请使用

ps.setNull(++index, Types.OTHER);

或者您可以使用:

ps.setObject(++index, null);

答案 1 :(得分:0)

这对我也很有用:

ps.setNull(++index, Types.BINARY);