Spring bootでPostgreSQLのbit(1)にインサートするときにハマった
PostgreSQLのbit(1)はCREATE TABLEで以下のように書くと定義できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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ツールなどからインサート文を発行してみます。
1 2 |
insert into sample_tbl values (3,false); insert into sample_tbl values (3,0); |
これはいずれもエラーとなります。
1 2 |
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))みたいに書かないとプレースホルダを使用して上手くインサートやアップデートができません。
1 |
int count = jdbcTemplate.update("update sample_tbl set setting = CAST(? AS bit(1)) where user_id = ?", 0, userId); |
selectする場合
ちなみにbit(1)列をselect文で取得したい場合は以下のように記述すれば取得できます。この時はBooleanを指定するようです。
1 |
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^