既に登録されているデータならば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月20日火曜日
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にしてしまって、エラーの嵐に・・)
booleanのテーブルの値が取れていない事に気付きました。
ソースコードをDLして調べてみました
Booleanをマッピングするところの型チェックが不足しているようです
PostgreSQLでは(←ポスグレだけなのかはよくわかりませんが・・)
boolean型はjava.sql.Types.BIT型を返しているようでした。
なので、if文を
(java.sql.Types.BOOLEANまたはBIT) ならば〜
という条件にしてみると、無事booleanのテーブル値が取れました。
jarにする時は、JDKは1.5でビルドしないと通りませんでした。
(最初1.6にしてしまって、エラーの嵐に・・)
登録:
投稿 (Atom)