Postgresql 无法在postgres的bytea字段中插入null
我无法在数据类型为bytea(blob)的postgres数据库中插入空值。这是我的java代码片段:Postgresql 无法在postgres的bytea字段中插入null,postgresql,jdbc,blob,Postgresql,Jdbc,Blob,我无法在数据类型为bytea(blob)的postgres数据库中插入空值。这是我的java代码片段: ps.setNull(++index, java.sql.Types.BLOB); bytea列是可为空的列。下表说明如下 testdb=# \d+ plan Table "public.plan" Column | Type | Modifiers | Storage | Stats target | Descript
ps.setNull(++index, java.sql.Types.BLOB);
bytea列是可为空的列。下表说明如下
testdb=# \d+ plan
Table "public.plan"
Column | Type | Modifiers | Storage | Stats target | Description
-------------+-------+-----------+----------+--------------+-------------
description | bytea | | extended | |
Has OIDs: no
我得到以下异常
java.sql.BatchUpdateException:批处理条目11插入到public.plan(description)值(NULL)已中止。调用getNextException查看原因。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);
这也对我起了作用:
ps.setNull(++index, Types.BINARY);
您得到的错误是什么?java.sql.BatchUpdateException:Batch entry 11 INSERT to public.plan(description)VALUES(NULL)被中止。调用getNextException查看原因。这是例外。列“description”的类型为bytea,但表达式的类型为oid。如何将其转换为oid。请尝试setObject(++index,null)
或setNull(++index,Types.OTHER)
谢谢,它与setNull(++index,Types.OTHER)一起工作:)还有一个问题,这些解决方案的可移植性如何?对于后代:我已经肯定地测试了ps.setObject(++index,null)。