2011年12月20日火曜日

insert文の勉強

既に登録されているデータならばinsertを行わないSQL文

selectで登録済みかどうかをチェックしてからinsertする・・という発想になり
2つのSQL文を発行していました
いつも、これを1度にまとめられないものかと思いながら・・

今回は1つのSQL文で上記のことを行うようにしました
DBはPostgreSQLです

例)
テーブル:table1
カラム:value1, value2

insert into table1 (value1, value2)
select 'value1', 'value2' from table1
where not exists (
select * from table1 where value1 = 'value1'
) limit 1


(空で書いたので実行できないかもしれません)

複数のテーブルが関連するような複雑なものではなく、
1つのテーブルに、単純にレコードを挿入する際に、
重複登録を避けたいための文です

limitがいけてない気もします・・
not existsだけでは複数行該当する→複数回挿入してしまう→そうだlimitだ
という発想です・・
ど、どうなのでしょうか
よりよい手段を見つけたいです

2011年12月14日水曜日

Butterfly Persistenceのboolean型

Butterfly Persistenceを利用する機会があり、
booleanのテーブルの値が取れていない事に気付きました。

ソースコードをDLして調べてみました
Booleanをマッピングするところの型チェックが不足しているようです

PostgreSQLでは(←ポスグレだけなのかはよくわかりませんが・・)
boolean型はjava.sql.Types.BIT型を返しているようでした。

なので、if文を
(java.sql.Types.BOOLEANまたはBIT) ならば〜
という条件にしてみると、無事booleanのテーブル値が取れました。

jarにする時は、JDKは1.5でビルドしないと通りませんでした。
(最初1.6にしてしまって、エラーの嵐に・・)