既に登録されているデータならば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にしてしまって、エラーの嵐に・・)
2011年11月26日土曜日
SQLiteをVisualStudioで使う
文字列が化けてハマりました。。
VS2010, SQLite3, c++
「マルチバイト文字」を使用するプロジェクト環境です
・DBはUTF-8で作成
sqlite3_open_v2を使ってオープン。
・文字列の書き込みはUTF-16
SJIS -> UTF-16に変換したLPBYTEの文字列をsqlite3_bind_text16で書き込み。
MultiByteToWideChar(CP_ACP, ... )で変換します
・文字列の読み出しもUTF-16
sqlite3_column_text16で読み出したものをLPBYTEにキャスト、
UTF-16 -> SJISに変換して文字列を取得。
WideCharToMultiByte(CP_ACP, ... )で変換します
何故かわかりませんが、
DBと文字列を共にUTF-8で扱うと化けたので、
文字列の方を16で扱っています・・何でだろう。。
更に、DBと文字列を共にUTF-16で扱うと、これもまた化けてしまいました
どこかで何か間違えたのだろうか。うーん。。
もう少し試してみる必要がありそうです。
ついでにハマった(引っかかった)ことは、
bind〜が「1」originなのに、
column〜が「0」originだということ。
絶妙なる引っかけ・・。初心者にはキビシイっす
VS2010, SQLite3, c++
「マルチバイト文字」を使用するプロジェクト環境です
・DBはUTF-8で作成
sqlite3_open_v2を使ってオープン。
・文字列の書き込みはUTF-16
SJIS -> UTF-16に変換したLPBYTEの文字列をsqlite3_bind_text16で書き込み。
MultiByteToWideChar(CP_ACP, ... )で変換します
・文字列の読み出しもUTF-16
sqlite3_column_text16で読み出したものをLPBYTEにキャスト、
UTF-16 -> SJISに変換して文字列を取得。
WideCharToMultiByte(CP_ACP, ... )で変換します
何故かわかりませんが、
DBと文字列を共にUTF-8で扱うと化けたので、
文字列の方を16で扱っています・・何でだろう。。
更に、DBと文字列を共にUTF-16で扱うと、これもまた化けてしまいました
どこかで何か間違えたのだろうか。うーん。。
もう少し試してみる必要がありそうです。
ついでにハマった(引っかかった)ことは、
bind〜が「1」originなのに、
column〜が「0」originだということ。
絶妙なる引っかけ・・。初心者にはキビシイっす
2011年10月21日金曜日
PostgreSQL interval
PreparedStatementでintervalを使う時にはまったのでメモ。
例えば、
now() + interval '10 days'
というようなことをしたい時、
「interval '10 days'」の部分を
1)
「?」にする。
PGInterval a = new PGInterval();
a.setDays(10);
PreparedStatementでsetObject(n, a);
2)
「cast (? as interval)」にする。
PreparedStatementでsetString(n, "10 days");
1か2のどちらかで出来ました。
例えば、
now() + interval '10 days'
というようなことをしたい時、
「interval '10 days'」の部分を
1)
「?」にする。
PGInterval a = new PGInterval();
a.setDays(10);
PreparedStatementでsetObject(n, a);
2)
「cast (? as interval)」にする。
PreparedStatementでsetString(n, "10 days");
1か2のどちらかで出来ました。
ラベル:
postgresql
2011年8月6日土曜日
Lucene(環境構築)
超初心者がひとまずJavaで動かせれば充分、の段階まで書いています。
まずは環境の整備です。
・eclipse
HeliosのIDE Developers for Javaを入れます。
日本語化は、Pleiadesの本体のみをダウンロードのコーナーから落としました。
features, pluginsフォルダの中身をコピーします。
Macってフォルダが置き換わるのが怖いですね。
コピーのつもりがうっかり置き換えたことが何度もあります・・!
注意してフォルダの中身をコピーです。。
・Luceneを入れる
Apache Lucene Core 3.3をダウンロードします。
解凍してできたluceneのフォルダは、お好きな場所へ配置します。
・lucene-core-3.3.0.jar
これプロジェクトのjarに追加すると、
luceneのあれこれを利用できるようになります。
・日本語の形態素解析
今回は、「日本語の形態素解析をせよ」というお題を課せられておりますので、
日本語に対応した形態素解析ができるライブラリを追加します。
lucene-coreには、上記のようなものは含まれておりませんでした。
そこで「sen」というライブラリを使用する記事を多く見受けたのですが、
2011年真夏の今となっては、senは活動休止のようです。なんたる。
と思ったら、lucene-gosenというライブラリがありました。
http://code.google.com/p/lucene-gosen/
lucene-gosen-1.1.1-naist-chasen.jarをダウンロードしました。
ipadicの方と、naistの方とは、どちらがどう違うのか、まだ調べておりません。
そのうち調べましょう。。
上記のjarをプロジェクトに追加しました。
これでJapaneseAnalyzerが使えます
・N-Gram解析
形態素解析だけでなく、NGram解析も試してみます。
N-Gram解析をするためには、NGramTokenizerを使うらしい…のですが、
lucene-coreを追加しただけでは、見えていません。
lucene-3.3.0/contrib/analyzers/common/lucene-analyzers-3.3.0.jar
これを追加すると、ngram関係が使えるようになりました
環境の整備はここまでです。
ソースコードは、そのうち・・
まずは環境の整備です。
・eclipse
HeliosのIDE Developers for Javaを入れます。
日本語化は、Pleiadesの本体のみをダウンロードのコーナーから落としました。
features, pluginsフォルダの中身をコピーします。
Macってフォルダが置き換わるのが怖いですね。
コピーのつもりがうっかり置き換えたことが何度もあります・・!
注意してフォルダの中身をコピーです。。
・Luceneを入れる
Apache Lucene Core 3.3をダウンロードします。
解凍してできたluceneのフォルダは、お好きな場所へ配置します。
・lucene-core-3.3.0.jar
これプロジェクトのjarに追加すると、
luceneのあれこれを利用できるようになります。
・日本語の形態素解析
今回は、「日本語の形態素解析をせよ」というお題を課せられておりますので、
日本語に対応した形態素解析ができるライブラリを追加します。
lucene-coreには、上記のようなものは含まれておりませんでした。
そこで「sen」というライブラリを使用する記事を多く見受けたのですが、
2011年真夏の今となっては、senは活動休止のようです。なんたる。
と思ったら、lucene-gosenというライブラリがありました。
http://code.google.com/p/lucene-gosen/
lucene-gosen-1.1.1-naist-chasen.jarをダウンロードしました。
ipadicの方と、naistの方とは、どちらがどう違うのか、まだ調べておりません。
そのうち調べましょう。。
上記のjarをプロジェクトに追加しました。
これでJapaneseAnalyzerが使えます
・N-Gram解析
形態素解析だけでなく、NGram解析も試してみます。
N-Gram解析をするためには、NGramTokenizerを使うらしい…のですが、
lucene-coreを追加しただけでは、見えていません。
lucene-3.3.0/contrib/analyzers/common/lucene-analyzers-3.3.0.jar
これを追加すると、ngram関係が使えるようになりました
環境の整備はここまでです。
ソースコードは、そのうち・・
登録:
投稿 (Atom)