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);
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント