Spring bootでPostgreSQLのbit(1)にインサートするときにハマった

Spring bootでPostgreSQLのbit(1)にインサートするときにハマった

PostgreSQLのbit(1)はCREATE TABLEで以下のように書くと定義できます。

CREATE TABLE public.sample_tbl
(
  user_id integer NOT NULL,
  setting bit NOT NULL,
  CONSTRAINT sample_tbl_pkey PRIMARY KEY (user_id)
)
WITH (
  OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.sample_tbl
OWNER to postgres;

これでsetting列がbit(1)になります。

A5M2ツールなどからインサート文を発行してみます。

insert into sample_tbl values (3,false);
insert into sample_tbl values (3,0);

これはいずれもエラーとなります。

insert into sample_tbl values (3,B'1');
insert into sample_tbl values (4,B'0');

このようにB'1'、またはB'0'とするとインサートが正常に実行されます。

Spring bootでJdbcTemplateで記述する場合は、CAST(? AS bit(1))みたいに書かないとプレースホルダを使用して上手くインサートやアップデートができません。

int count = jdbcTemplate.update("update sample_tbl set setting = CAST(? AS bit(1)) where user_id = ?", 0, userId);

selectする場合

ちなみにbit(1)列をselect文で取得したい場合は以下のように記述すれば取得できます。この時はBooleanを指定するようです。

List<Boolean> setting = jdbcTemplate.queryForList("select setting from sample_tbl where user_id = ?",Boolean.class, 111);

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました