« 3月 2006 | Main | 1月 2006 »

2006年02月28日

Hibernate Annotationsその4

Hibernate Annotationsで「outer-join="false"」を指定する方法がどうしても分からず、結局会社の先輩に教えて貰って、設定ファイルに「hibernate.max_fetch_depth=0」を指定しOuter-Join自体を使われない設定にしました。
これでいいのか、どっかに個別の設定方法があるのか・・・。
まぁ考えた所でもうわかんないんで、取りあえず今日調べた事のメモでも書いとく。

「cascade="all-delete-orphan"」はほぼそのまま「@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})」って事でよさそう。
ただし「javax.persistence」のじゃなくて「org.hibernate.annotations」にあるCascadeTypeを使う(Cascadeもorg.hibernate.annotations)。

「lazy="false"」は「@OneToMany(fetch=FetchType.EAGER・・・」だな。

「batch-size="10"」は「@BatchSize(size=10)」、「<index column="HOGE_INDEX"/>」は@IndexColumn(name="HOGE_INDEX", base=0)とかでいいのかなー。

「inverse="true"」がこれまたよくわかんない。
多分「@JoinTable」の「inverseJoinColumns」に結合される側の参照されるカラムを定義、って奴が同等のものなんだろうけど、試しにやったら起動時の初期化のとこでClassCastExceptionが起きてしまってだめ。

なんか俺がとろい間違いをしてるって事は分かるが、どこが悪いのかは例外見ても全くわからず。
ハァ・・・。

どっかに英語でもなんでもいいんで、HibernateのマッピングとAnnotationsの対応表みたいのないっすかね~?
あれば全然楽なのに。

なんか楽するためのAnnotation使ってMappingと同じ設定にするために苦労してるって、すっごく不毛な事やってる気がしてきた。
これだったら最初面倒でもMappingファイル書いた方が楽かも。
XDocletなら自動生成もできるしさー。

Posted by Akishin at 2:38 午前
Categories: Java
|

AnnotationSessionFactoryBean

Hibernate AnnotationsとSpringを連携させて使う場合、Spring1.2.2からorg.springframework.orm.hibernate3.LocalSessionFactoryBeanの他にorg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanってのが使えるようになってるみたい。

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
   <property name="dataSource">
     <ref bean="dataSource"/>
   </property>
   <property name="annotatedClasses">
     <list>
       <value>test.package.Foo</value>
       <value>test.package.Bar</value>
     </list>
   </property>
   <property name="annotatedPackages">
     <list>
       <value>test.package</value>
     </list>
   </property>
 </bean>
 

JavaDocによればこんな感じ。
これだとannotatedClassesがあるからLocalSessionFactoryBeanと違ってhibernate.cfg.xmlがなくても大丈夫なのがいいですね。

Posted by Akishin at 1:04 午前
Categories: Java
|

2006年02月27日

Hibernate Annotationsその3

Hibernateの関連のとこは便利だけど、実は2.xの時も全然勉強してないから、自分で0から書いてたら結構混乱してきました。
ずーっとこのままにしとくのもなんだか恥ずかしいので、この機会にしっかりやっておきたいところ。
時間作ってHibernate イン アクションとかにも詳しく載ってたからもう一度しっかり熟読しないとなぁ。

それはさておき、とりあえず今日分かったつもりになったところをメモ。

コレクションのマッピングにListを使う場合、Webで2.xのXDocletの解説記事見ると@hibernate.collection-key columnと@hibernate.collection-indexが必須、って書いてあるとこが多いけど、Annotations使う場合はなくても平気っぽい?

reference読むとListをマッピングする際のAnnotationの書き方は↓の4種類あるらしい。


@org.hibernate.annotations.CollectionOfElements
@OneToMany
@ManyToMany + @OrderBy
@org.hibernate.annotations.IndexColumn

JPA準拠でやろうとすると@OneToManyか@ManyToMany + @OrderByのとこで使えるって事になるのかな。
多分この中の@org.hibernate.annotations.IndexColumnがXDocletの@hibernate.collection-index相当って事なんだろうな。

referenceのサンプル見ると@OrderByは別に @ManyToManyじゃなくても付けてるみたい。
なんで、@OrderByは単純に指定したカラムでOrderByしたのをListに格納してくれるってもののようだ。

他には、2.xで双方向関連のとこで良く見かけたinverse="true"はどこで設定するのかなー、って思ってたら@JoinTableの属性にあるみたい。
他に同じような名前見当たらないし、多分これ使うんだろう。
試してないけど。

あと継承使ったマッピングのとこもちょこっとやってみる。
つっても単純に、各テーブルにある共通のカラム(INSERT_DATEとか)をスーパークラスでマッピングして、サブクラスはそれ以外、って奴を試しただけ。

referenceで言うと「2.2.4.4. Inherit properties from superclasses」のとこ。
スーパークラスには@MappedSuperclassアノテーションを付けて(@Entityは付けない)、共通のプロパティは普通にマッピング。
あとはそれを継承して使うだけ。

ただ、これだとサブクラスに共通カラムを持たないEntityを作成する必要が出てきた時にちょっと困る。
で、その場合は@AttributeOverrideか@AttributeOverridesを使うことで解決可能になってる模様。
これらのアノテーションをサブクラスで定義して、スーパークラスでのマッピング定義を上書きすればOK。
サブクラス側のテーブルに共通カラム自体が無い場合、例えば↓のようにしたらイケました。
よく考えたらこれだとsave()とかはいいけどfind系でカラムねーよ!って怒られますね・・・。


@Entity
@Table(name="CHILD_TABLE")
@AttributeOverrides( {
    @AttributeOverride(name="insertDate", column = @Column(insertable=false, updatable=false) ),
    @AttributeOverride(name="updateDate", column = @Column(insertable=false, updatable=false) ),
    @AttributeOverride(name="deleteDate", column = @Column(insertable=false, updatable=false) ) } )
public class child extends parent ・・・

referenceだとマッピング定義の変更方法として載ってたみたいなんで、サブクラスにプロパティ自体が無い時のマッピング無効化にこの方法を使うのが正しいのかどうかはよくわかりませんが 、取りあえずは出来てよかったよかった。
なんか他に親クラスで定義したプロパティを子で無効にする方法ってあるんですかね?
継承マッピングをもっと勉強するしかないって事か。
マッピングファイルの場合は単純に定義かかなければいいだけだったんだけどなー。
仕方ないんで、とりあえずは共通カラム持たないEntityだけ継承関係持たせないようにしました。

さて、疲れたから寝よー。

Posted by Akishin at 1:40 午前
Categories: Java
|

2006年02月25日

MySQLの古いバージョン

自宅に仕事で使うのと同じバージョンのMySQLを入れようと思ったら、ググっても見つからなくて焦る。

と思ったら公式に思いっきり置いてありました。
結構わかりずらかった(俺だけ?)のでメモ。

公式の上の方のタブで「Developer Zone」をクリック。
タブのすぐ下のメニューが並んでる中から、一番左の「Downloads」をクリック。
画面真ん中ら辺の「MySQL Community Edition」のとこの「Older Releases:」から「Archives of Older Releases」をクリック。

さすが公式、各種OS用のマイナーバージョンまで全部ダウンロード可能になってるみたいですね。
よかったよかった。

2006年02月24日

Hibernate Annotationsその2

今夜もHibernate Annotationsのお勉強しました。
Sequenceの指定方法を調べるのにちょっと時間かかっちゃった。

どうやらSequenceを使う際の指定方法も変わったらしい。
前は

@Id(generate=GeneratorType.SEQUENCE, generator="SEQ_HOGE")

ってやってたのが、classのとこに

@SequenceGenerator(name="HOGE_ID_SEQ", sequenceName="SEQ_HOGE_ID")
public class HogeEntry { ・・・

みたいにやって、その後@idの横に

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HOGE_ID_SEQ")
@Column(name="HOGE_ID")
private long hogeId;

こんな感じで指定するらしい。
@SequenceGeneratorのname属性がイマイチよくわからないけど、とりあえずここで付けた名前と@GeneratedValueのgenerator属性の値が一致してればいいみたいだ。
そのうちちゃんとじっくりドキュメント読みます。

で、ここで問題発生。
Session#save()のとこで↓の例外が発生してしまいました。

org.hibernate.exception.SQLGrammarException: could not get next sequence value

ログ良く見たらどうもHibernateがSequence取得用として↓みたいなSQL吐いてるのが原因みたい。

select next value for SEQ_HOGE_ID from dual_SEQ_HOGE_ID

「dual_SEQ_HOGE_ID」なんてテーブル作ってないから、そりゃ出て当然っちゃ当然なんだけど・・・こーゆーもんなんですか?
で、HSQLDBにこんな↓SQL流してから実行したら今度は無事OK。

CREATE TABLE DUAL_SEQ_HOGE_ID (
DUMMY INTEGER
);
INSERT INTO DUAL_SEQ_HOGE_ID VALUES (0);

他に方法ないのかな?

それにしても途中ちょこっと困ったけど快適、快適♪
次は関連をやろうかなー。

Posted by Akishin at 2:51 午前
Categories: Java
|

2006年02月23日

Hibernate Annotations

今更ですがなんとか流行についていこうとHibernate Annotationsを使ってみました。
バージョンは昨日公式から落としてきた3.1 beta 8です。
Hibernateの方は3.1.2が出てたのでそれを使用。

とりあえず、きしだ なおきさんのサイトで公開されているサンプルを動かしてみようと思い挑戦。

Hibernate Annotations
http://www.fk.urban.ne.jp/home/kishida/kouza/hibernateanno.html

DBはPostgreSQLは入ってないんでお気に入りのHSQLDBを使用。
とりあえずコピペ、コピペで作ってみると、「属性 access は注釈型 Entity で未定義です。」と怒られちゃいました。
で、公式よく見るとそこら辺がちょこっと変わってたんすね。

Hibernate Annotations Migration Guide
http://www.hibernate.org/371.html

ここのAccess typeのとこに

The accessType attribute is no longer available in @Entity, @EmbeddableSuperclass, @Embeddable.

って思いっきり書いてありました。
続き読むと、どうやら@Idか@EmbeddedIdを書いた位置によってアクセス方法が変わります、みたいな事が書いてある模様。
これらのアノテーションをフィールドにつければ直接アクセス、メソッドにつければgetter/setterによるアクセスって事になったらしいです。
ありがとうExcite翻訳。

で、そこだけ変えたら問題なく動作しました。
今までもマッピングファイルはXDocletとかで生成が多かったので、イマイチその便利さが納得できてなかったんですが、実際使ってみるとJavaのソースコード上で設定を書けるっていいですね~!
いちいちXMLとソースコードを行ったり来たりしなくていいし、Eclipse上でエラーとか出してくれるのもいい感じ。

これからはアノテーションの時代になるんでしょうか。
少なくともフレームワークなんかはどんどんそういう方向になってくんだろうなぁ。
もっと勉強しよっと。

Posted by Akishin at 2:52 午前
Categories: Java
|

2006年02月22日

やっと購入CodeZine

CodeZine傑作選 Vol.1』を会社帰りにようやっと購入。
記事自体はWebに載ってるのそのまんま、って感じですが、やっぱり紙媒体で手元にあるってのは嬉しいもんです。
普段読まないようなジャンルの記事にも目を通すきっかけになりますしねー。

具体的なサンプルって、読んでると実際に自分で作ってみたくなりますよね。
この方向性のまま記事のクオリティ下げずに、コンスタントにシリーズ化してくれたら休日のお供に嬉しいかも。

まぁでも半人前の身としては、あんま目移りせずにもうちょっと仕事に直結するとこを深く掘り下げるべきなのかもなー。

Posted by Akishin at 2:18 午前
Categories: 技術書, 買い物
|

2006年02月18日

塵も積もれば・・・

塵も積もれば山となる、とはよく言ったものですね。
ほんの少し、ほんの少し、の繰り返しがやがて大きな結果を生むワケです。
で、最近積もった塵。

100均行く度に少しずつ買い集めた手品グッズです。
気付けばこんなに集まっちゃってました。

これだけ買ったのも関わらず、今のところ一つたりともまともに出来ません。
さすが100均クオリティ!!

・・・俺が不器用なだけです。
ちくしょ~!!
一つでもいいから上手くなりたいなぁ・・・。

Posted by Akishin at 11:45 午後
Categories: その他, 買い物
|

XPlanner

XPlanner入れてみました。
Java製のXP(eXtreame Programming)用プロジェクト管理ツールです。
インストール手順は以下な感じ。

  1. http://sourceforge.net/project/showfiles.php?group_id=49017&package_id=42226 ここから「xplanner-0.7b4-standalone.zip 」をダウンロード&適当なディレクトリに解凍してインストール。
  2. 解凍したディレクトリ\webapps\ROOT\WEB-INF\classes\xplanner-custom.properties のhibernate.connection.urlの値(HSQLDBの場所)を、自分の環境に合わせて修正。
  3. 解凍したディレクトリ直下にある startup_xplanner.bat を実行。
  4. 同梱されたTomcatが起動するので、http://localhost:7070 にアクセス。
  5. ログイン画面では、デフォルトのユーザーIDとパスワードは「sysadmin/admin」でOK。

ちゃんと国際化も考慮されてるみたい(完全じゃないけど)。
翻訳されてない単語弄りたければ、ResourceBundle_ja.propertiesを編集すればいいようだ。

まぁ別にXPやろうとか、そーゆーつもりでいれたワケではないんですけどね。
個人用に気軽に使えてそこそこ便利(且つ出来れば一般的)なタスク管理ツールが欲しいなーと思ってて、いろいろ試そうとしてるだけです。

BTSとかタスク管理とかのツールで、インストール楽チン、ほぼ設定いらず、っての他にもなんかないすかね?
小規模向けで全然構わないんで。
PHPやRuby製で素晴らしいソフトは結構あるんですが、普段仕事がほとんどJava ばっかなんで、わざわざローカルPC上に入れるのも面倒。
さらに Apache もしくは他のWebサーバも必要になる、ってなるとちょっと躊躇してしまうんだよなぁ。

環境構築自体は嫌いじゃないけど、自宅だと複数のソフトを起動しとかないと使えないツールは正直微妙。
いちいち立ち上げるのが面倒になって、結局すぐ使わなくなっちゃうし、かといってサーバマシン用意して常時起動しとくってほどの余裕もないんですよねー。

理想としてはJava製でTomcat+HSQLDBで動くツールですか。
JavaとTomcatなら手持ちのも会社のも全部のPCに入ってるし、HSQLDBならDBのインストールや設定の手間がかからないし、気楽に使えていい感じ。

TrackIt ってのがUIがEcho2でDBにHSQLDB使えてかなり気になるんだけど、まだ日本語化されてないっぽいんでこれまた手が出しづらい。
やっぱまずは英語かなぁ。

というか、一人ならExcelとかAccessなんかで気軽に管理してても全然オッケーなんだけどさ。
Vectorとかにもフリーでなんかありそうだしね。
それかPHPやRubyを勉強して、常に環境があるってな状態まで好きになってしまうってのも手かもなー。

XPlanner
http://www.xplanner.org/

various xplanner
http://variousxplanner.sourceforge.jp/

TrackIt
http://trackit.sourceforge.net/

AJAXを使ったJava製プロジェクトトラッキングツール - TrackIt 1.0.0
http://pcweb.mycom.co.jp/news/2006/02/16/342.html

2006年02月17日

Tomcat5.5 でDataSource

会社でこの話題耳にして試したくなったのでメモ。
まぁどうせやってみるの週末だけど。

Tomcat5.5のDataSourceをJNDI経由で使用するには
http://www5.atwiki.jp/cat_the_ripper/pages/19.html

Tomcat5.5でのデータソースの設定について - Java Solution
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=21956&forum=12

TOMCAT5でMySQLにDBCP接続ができません。 - Java Solution
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19752&forum=12

Tomcatなんてかなり使われてると思ってたけど、あんま情報ないみたいだ。

Posted by Akishin at 1:28 午前
Categories: Java
|

LookupDispatchAction

今更ながらStrutsのお勉強してたりします。

で、今はLookupDispatchActionの便利さに感動してるとこ(遅すぎ)。
ボタンの文字はやっぱ日本語だよね、って事で、LookupDispatchActonで日本語リソースのボタン使う時の方法を調べたら、そのものズバリのizuさんのブログや@ITのBBSが見つかりました。

LookupDispatchActionで日本語のkeyを使う時
http://d.hatena.ne.jp/nadi/20031217#p1

TilesとLookupDispatchActionで日本語のキーを使う
http://izu.shinzui.org/space/Tiles/LookupDispatchAction%26Japanese

LookupDispatchActionでの日本語使用 - Java Solution
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5918&forum=12&7

で、その通りにTilesRequestProcessorのサブクラスを作って完了。
しかしRequestの文字コード設定ならFilterでもいいんじゃないかなー?
と思い、TomcatについてるFilterを設定して試してみる。


%TOMCAT_HOME%\webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.java

Tomcat5.5.9だと↑このファイル。
このFilterをweb.xmlに設定し、encodingにはWindows-31Jを指定。
で、struts-config.xmlのRequestProcessorの指定は元のやつに戻す、ってな感じ。

で、試してみると・・・出来た!
とゆーワケで問題無く動作しました。
これだと、既存プロジェクトでEncodingFilterみたいの使ってるなら、敢えてRequestProcessorを継承しなくてもいいので嬉しいかも。

なんとなくFilter使った方が汎用的で良いような気がするけど、本当のところどっちの方法がより良いのかはお馬鹿なおいらには分かりませんでした。
馬鹿って悲しいですね。

Posted by Akishin at 1:07 午前
Categories: Java
|

2006年02月16日

は、はらがへって

リキがでねぇ・・・。
タイミングを逃したのでまぁいいや、と思ってお昼抜いたらテンション下がりまくりです。
帰る頃には線路に飛び込む寸前くらいまでブルーになってました。
やっぱり日中はちゃんと食べないとキツいっすね。

ま、ダイエットだと思えばたまにはいいか。
なんて思ってたんですが、結局帰りにコンビニで大盛牛丼を買ってしまったので、 チャラどころか恐らくマイナスです。

しかも食ったらこんな時間なのにテンション上がってきました。
さて、どうしたものかなー。

Posted by Akishin at 11:19 午後
Categories: その他
|

MiddlegenIDEその2

MiddlegenIDEでHibernateのバージョンのデフォルトは3.0ですが、変更するには新規作成時のMiddlegen Build File Wizard で「プラグイン」欄の横にある「詳細」ボタンで変更できました。

プロパティの型とかはMiddlegenのGUIが起動してから、ER図のカラム名のとこをクリックした後に、下の部分でいろいろ選べるんですね。

なるほどなるほど。
3.1対応はまだかなー。

Posted by Akishin at 1:22 午前
Categories: Java, ソフトウェア
|

2006年02月15日

MiddlegenIDE

HSQLDBのバージョン1.8.0でMiddlegenIDEを使う際、スキーマを特に作ってない場合でも、MiddlegenIDEの「スキーマ」欄に「PUBLIC」を指定しないと、「テーブルがねーよ」というような例外を吐いて落ちます。
(The database doesn't have any table named 'テーブル名'、とかなんとか)

生成されたmiddlegen-build.xmlを実行しても同じ。
Oracleと違って、HSQLDBだといっつもいちいちスキーマ切らないから最初原因がよくわかんなかったのでメモ。

MiddlegenIDE
http://sourceforge.net/project/showfiles.php?group_id=36044

HSQLDB
http://hsqldb.org/

Posted by Akishin at 12:58 午前
Categories: Java
|

2006年02月13日

20Q(トゥエンティキュー)

Amazonで頼んでた20Qがついに届きましたー!!

ワーイ。
2週間も待ちましたよ。

こいつが出す 約20問の質問に答えていくと、こちらが頭の中で考えた事を当ててくれるというスグレモノです。
人工知能なんだって。
一体どんなプログラムなんだろー??

しばらくはいい暇潰しになりそうです。
ってあんま暇ないけど。

Posted by Akishin at 11:40 午後
Categories: 買い物
|

最近の購入書籍

ここ数日で購入した書籍。

Jakarta Strutsクックブック
メール送信システムの作り方大全
RSSマーケティング・ガイド 動き始めたWeb2.0ビジネス
すごい考え方

「Strutsクックブック」は、1.2対応の書籍1冊も持ってなかったので丁度良いと思って購入。
つっても仕事だとまだ1.1ベースなんですが。
ちょこっとだけど、HibernateやSpringとの統合についても触れられてるのは嬉しいかも。

「メール送信システムの作り方大全」は、Perl、PHP、Javaなどのサンプルを交えながらメールの仕組みについて詳しく解説してる本。
まだパラパラめくったくらいだけど、わかりやすい解説で結構良さげ。
普段ライブラリとか使って何気なく送受信してるわりに、細かい仕組みとかあんま分かってなかったんで、これを機にしっかりと理解しておきたいところ。
作りかけで止まってるcommonsのPOP3ClientやEMailのプログラムにまた手を入れてみようかな。

あとの2冊はまだ全然読んでない。
「RSSマーケティング・ガイド」は、なんとなく動向知っておきたいと思ってたところにいいタイミングで出てたので購入。
「すごい考え方」は、「すごいやり方」、「すごい会議」が面白かった大橋禅太郎氏の師匠(?)の本らしいので購入。

まぁこの辺はボチボチ読んで行きます。

Posted by Akishin at 11:31 午後
Categories: 技術書, 買い物
|

2006年02月12日

桔梗信玄餅吟造り

折角実家に帰ったので、慌しいながらもお土産を購入。
今回はちょっと奮発して、自分用に「桔梗信玄餅吟造り」の8個入りを購入。

普通の信玄餅に比べると、見た目も味もちょっと上品な感じ。

残念ながら値段がちょっと高い(倍近い)事と、あまり日持ちがしないとの事なので、会社へのお土産はノーマルバージョン(安い方)。

まぁこっちも美味しいからいいよね~。

Posted by Akishin at 8:53 午後
Categories: その他
|

もなか

もなかが急に後ろ脚が立たなくなったとの連絡があり、週末慌てて実家へ帰ってきました。
思ってたよりは元気そうで、両親によれば少しずつ回復してる様子とのこと。

離れて暮らしてる以上、こういう事がある事もある程度は覚悟していますが、やっぱりいざなってみると心配でたまりませんね。
早く元気になってくれるといいなぁ・・・。

Posted by Akishin at 8:45 午後
Categories: その他
|

2006年02月10日

R/O マッピング

最近になってようやくO/R マッピングフレームワークを勉強する機会が多くなってきたんですが、なんとなく使いづらいなー、と感じる事も多々あったりします。

まぁ自分は未熟だし、オブジェクト指向がしっかり身に付いていないってのもあると思うんですが、仕事だとやっぱりDB中心で考える機会の方が多い気がするんですよね。
まずはDB設計ありき、って感じで。

そういった場合の思考の順序を考えると、O/RマッピングよりR/Oマッピングの方がピッタリくるんじゃないか、なんて思ってみたり。

実際いくつかツールはあるみたいだけど、職場でもあまり耳にしないし、個人的に試した事もないんですけどね。

そのうち実際に試してみて、そっちのがしっくり来るようなら考えないとなー。
要はどれだけ効率的にできるか、ってとこが問題なワケだし、いくらJava好きだからって仕事でオブジェクト指向に固執する必要もないしね。

なんて事をなんとなく考えてたら、この事について深く考察してる方を発見。

Happieのブログ - 業務アプリケーションにはオブジェクト指向は向かない
http://happiese.exblog.jp/3331854/

Happieのブログ - ORマッピング Cache
http://happiese.exblog.jp/3480463

かなり勉強になりました。
『Hibernate イン アクション』とか『エンタープライズアプリケーションアーキテクチャパターン』とかでO/Rマッピングなアプローチを勉強してる最中なワケですが、暇見てR/Oマッピングフレームワークなんかも少し触ってみようかな。

blancoDb Enterprise Edition
http://hp.vector.co.jp/authors/VA027994/blanco/blancodb.html

SourceForge.net- Amber
http://sourceforge.net/projects/amber-db

Lightweight R/O Mapping
http://www.onjava.com/pub/a/onjava/2005/12/07/relational-object-mapping.html

Posted by Akishin at 12:41 午前
Categories: Java, プログラミング
|

2006年02月09日

HSQLDB

Webアプリのプロトタイプとか作る時に、HSQLDBは軽くて楽チンなんでよく使ってるんですが、仕事だとOracleしか使わないんで違いに結構戸惑いますね。

だもんで、調べたことはメモっとこう 。

SELECT文とかINSERT文でSequenceを取得するには以下のようにする。

SELECT NEXT VALUE FOR 'シーケンス名' FROM テーブル名

HSQL Database Managerだと

CALL NEXT VALUE FOR 'シーケンス名'

でも取得できるみたいです。
こっちの書き方がJavaの中で使えるかは不明。

ちなみに、HSQLDBで、OracleのDualテーブル相当のものが分からなかったので、とりあえずDualって名前でダミーのテーブル作ってそれ使ったりしてます。

あとハマったのは、DBに保存した日時を取得するところで、時間が全部0になって切り捨てられてしまうという現象。
これについては、「HSQLDB(1.8.0 )のSYSDATEは日付のみ。時刻も含める場合はCURRENT_TIMESTAMPを使う。」ってことでいいのかな?

DATEは日付のみで、時刻含めるにはTIMESTAMP、って標準SQLだとそうなんでしたっけ?
Oracle8iだといつもSYSDATEで時刻まで入ってた(よね?)から最初わかんなくって困りました。

この現象を調べてる時に、JDBCで時刻まで含めて取得するにはResultSet#getDate()ではなくResultSet#getTimestamp()を使う、という情報も見つかり、迂闊にもgetDate()使ってたんで危うく2重にハマるとこでした。
危ねー危ねー。

Posted by Akishin at 2:09 午前
Categories: Java, プログラミング
|

OracleのJDBCドライバのバージョン

Oracle Server 9.0.1にOracle JDBC Driver 8.1.7で接続してたらわけのわからないエラーが出て参った。

SQLState : 60000 ErrorCode : 600 ORA-00600: 内部エラー・コード、引数: [ttcgcshnd-1],[0],[],[],[],[],[],[]

なんだろう?と思って調べたら、同じ問題を解決した人を発見。

http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-697019&bbsid=1&no=3804&view=8

つまり、JDBCドライバのバージョンが古いからいけないっつー事ですね。
素直に9.0.1に付属のドライバに変更したら問題なく動作。

このエラーメッセージじゃワケわかんないよなぁ。

Posted by Akishin at 1:41 午前
Edited on: 2006年02月10日 12:45 午前
Categories: プログラミング
|

2006年02月07日

誰よりもつよく抱きしめて

週末でこのまえBOOKOFFで購入した新堂冬樹の『誰よりもつよく抱きしめて』と『忘れ雪』を読了。

う~む・・・微妙。
結構期待大きかったのに、泣けず。
泣けると言われてるものを見て泣けないのって、自分の心が汚れてるような気がしてなんか悔しいですね。
前読んだ『天使がいた三十日』はかなり泣けたんだけどなぁ・・・。

特に忘れ雪の方は、最後の方の展開が急過ぎてなんか白けてしまった。
もっとジワッとくるのがいいです。ジワッと。

Amazonの書評見る限りでは、天使がいた三十日の方が結構厳しい事書かれてますね。
俺的にはこっちのが断然いい話だと思ったんですが。
普通の人と感覚がズレてるのか、それとも俺が幼稚なのか・・・。

まぁ幼稚なのは否定できないけどさぁ・・・。
とりあえず、またなんか泣ける本探そう。

Posted by Akishin at 1:28 午前
Categories: 読書
|

2006年02月02日

メールの自動振り分けすると

メールの自動振り分けすると、結構読み忘れ多くなりますね。
便利なんだか、不便なんだか、微妙に思えてきました。

前も書いたCodezineが本になるってやつなんですが、振り分けられて見てなかったフォルダ覗いたら告知のメールが来てました。

・書名:CodeZine傑作選 Vol.1
・頁数:212ページ
・色数:4C+1C
・判型:B5正寸
・本体価格:980円
・発売日:2006年2月13日
・発行:翔泳社

って事らしいです。
楽しみ。

そういや忘れかけてたけど、今月こそは「Seasar入門」出るのかな?
また延期にならなけりゃいいけど。

O'REILLYからは開発者ノートシリーズに「JBoss」が出るみたいだし、なんだかんだ言って今月も結構買っちゃいそうだなぁ・・・。

貯金・・・本棚・・・どうしよう・・・。

Posted by Akishin at 10:55 午後
Categories: その他
|