【Pure】HSQL database engine【Java】
100% pure Java なデータベース HSQL について語ってくれたまえ。
Javaアプリケーションのデータ格納用に、PostgreSQL や
MSDE をインストールするのはちょっと面倒くさい、
Jet(mdb)みたいにセットアップできるデータベースが欲しい、
そんなあなたに HSQL。
http://hsqldb.sourceforge.net/ それじゃ事実上使えないに等しいといってるようなもんじゃね? SQL直書きなら大丈夫だが
moveToInsertRowとかJDBC2の機能ははじかれるね
小規模ならいいとはいえ多少弱いな hibernateする分にはOracleもHSQLDBも変わりない。 Oracle の rownum や PostgreSQL の limit に相応するの無いっすかね?
hibernate 使わずに Spring の JDBC Template でやっちまおうと思ってるんですが。 >153
思いっきり見落としてた。ありがとう。
ttp://hsqldb.sourceforge.net/doc/guide/ch08.html#select-section
LIMIT n m 質問なのですが、
日付の引き算はどうしたらできるのでしょうか。考えても思いつかず。お願いします。 それは「HSQLDBではどうやるんですか?」という質問だと理解していいんだな? >>156
そうです。わかりづらい書き込みですみません。 >>157
ならば、 153が示したHTMLの"Built-in Functions and Stored Procedures"辺りに
答えがあるだろう?ちゃんと読んだか? >>157
じゃあDATEDIFF( string, date1, date2)だな。
date1, date2に比較したい日付列、stringは比較する単位を指定する。
'ms'='millisecond', 'ss'='second','mi'='minute',
'hh'='hour', 'dd'='day', 'mm'='month', 'yy' = 'year'が指定できるらしい。
TESTDATE( pk INTEGER, start DATE, end DATE)
というテーブルがあって、pkが1、startが'2005-01-20'、endが'2005-01-29'だとしたら、
SELECT DATEDIFF( 'dd', end, start) AS diff from TESTDATE where pk = 1で
diffには-9が入る。 IDENTITYが最大値に到達するとどうなるんでしょうか?
意味からいってサイクリックに採番するわけにもいかないし
エラー発生とかでしょうか。 text table で、update 繰り返すと .data ファイルに隙間(空白)がどんどん出来ていくのは仕様ですか?
Memory-Only(URLがjdbc:hsqldb:mem:xxx)でSEQUENCE作ると、NEXT VALUE FOR が毎回0を返すんだが・・・
In-Process(URLがjdbc:hsqldb:file:xxx) でデータベース開いた場合はうまくいく。なぜ?
hsqldb-1.7.2.7と1.7.3.3で確認した。うちだけ?何か間違えた? 自己解決。SELECT NEXT VALUE FOR XXX FROM の返す結果が0件だったので
NEXT VALUE FORが評価されてなかった。対象の表が自作のテーブルだったんだが、
ここにレコードがなかった。
ドキュメントには「SYSTEM_SEQUENCES 使え」って書いてあるね・・・お騒がせしました。 google で hsql を検索すると、このスレが先頭に来る。
いやそんなことはどうでもいい。
「もしかして: mysql」ってなんだ(゚Д゚)ゴルァ 皆さん、HSQLのバックアップ処理はどうしていますか?
MySQLのADMINみたいなプログラムはあるんでしょうか?
MySQLADMINだと時間指定すれば勝手にバックアップ取ってくれるし、
初心者でも簡単に使えるデーターべすですね。
HSQLの評価は凄く高いですけど、管理が面倒だとちょと・・・
みなさんどうされていますか? >>168
使ってみた?
使ってみたのならそういう感想はでないとおもうんだが
>>169
はい、ダウンロードして使ってみました。最新版の1.8です。
やはり、MySQLの管理プログラムに値するものは付属していませんね。
AWT版とSWING版のSQL文入力コンソールがあるだけで、
「午前4:00に、テーブルAのデーターを全部バックアップせよ」なんて
できないです。すこしがっかりです。 MySQLだって単体には管理ツールついてこんし
組み込みDBという扱いならどういうものかわかるとおもわれ HSQLDBのバックアップなんて、ディレクトリごとコピっとけば終わりじゃないの? ディレクトリというかさらに細かいところを見ていけばもっとシンプルだけどな
どっちにしろあれほどシンプルな格納の仕方はないな
ログそのものがデータベース >>173-174
ちょっと興味がありますので、詳しく教えてくださいませんでしょうか。
さらに細かいところとはつまりどういうことでしょうか。
MYSQLのバックアップだと、SQL文がずらーと書かれたファイル1つで
バックアップとリストアができます。
HSQLをJBOSSと使いたいのですが、バックアップが簡単にできないと
困っています。どうか、どなたかご指導ください。
宜しくお願い致します。 HSQLDBはJBOSS自身もつかってたような
本当にHSQLDB使ってみたの?
ならバックアップがどうのこうのって話は出てこないと思うんだが もうひとつ追加
JBOSSで使うのはいいけどサーブレットで使う場合はアプリ側で排他しないとダメだぞ
いわゆるクライアントサーバーのDBじゃないからね >>177
サーバーとして使えます。
常時作動させて、それでバックアップを午前の4時に自動的に取るバッチ処理
をしたいのですが、できません。
やっぱり、HSQLを本番稼動させている方は少ないみたいですね。
あきらめようかな。ここのどなたも使ってないってことは実績が無いと
みていいともいます。 サーバーとして使えるって?
排他制御がないのにどうやって?
あくまでも接続方法としてTCPIPでも可能ってだけだよ 実績は豊富にある
DBの名前自体大きく変わったからね
まぁ組み込みDBってのは表に出てくることなく裏で動いてるものだよ
HSQLDBはサブクエリーも使えるしスタンドアロンDBとしては優秀
Access(JET)よりちょっと上ってところだな
>179
JBOSSを(J2EE)サーバとして使ってるって事でしょ。
>178
cronなり何なりでファイルをコピーするだけでいいと思うのだが、
「できません」ってどういう事?
できない状況が考えられないので何度も「本当に使ってみたの?」と
言われているんだと思う。
商用でも使われていると思うよ。うちはスタンドアロンのGUIアプリに
組み込んで使った。VB+Accessみたいに簡単にできちゃうのがgood >>175
なんか何が疑問なのかさっぱりわからんのだが....
HSQLDBを起動して使い始めると、三つのファイルができる。たとえばDB名がTestDBなら、
TestDB.script、TestDB.log, TestDB.propertiesの三つだ。基本的には、起動コマンドを打った
ディレクトリにできる。
このうち「.script」がSQLログ。こいつがあれば復旧可能だ。
完全バックアップするにしても、三つのファイルがあるディレクトリを丸ごとコピーしとけば終わり
だろ?という話なんだけど? うちもスタンドアロンアプリで組み込んで使ったよ
これは便利だ うちも同じことやりますた。(GUIアプリ)
in-process で使えるRDBだからすごく楽ですよね。
画面の表示内容やら、いろいろなものを保存してます。
独自ファイルで実装してたらきっと泣いてたと思う。
バックアップもファイルコピーして終了だし。素晴らすぃ。 ダーティリードありとドキュメントに書いてあるような気がするんだけど、皆様は排他ってどうしてます?
やっぱアプリ側で楽観的ロック? 排他機能がすっぽりおちてる以上アプリ側でやるしかないだろ
組み込みってそういうもんだと思ってるから別になんともおもわんな
自前でストレージエンジン作るのに比べたら・・・
Apache Licence2.0というのは掻い摘んで言うとどんなライセンスなのでしょうか? このソフト使ってるよーとか、その組み込んだソフト自体のバグの責任はとらねーよとか
そういう明示が必要 なんだなんだ、しばらく見ないうちに、自分でやってみたり調べもしない香具師が増えたのか? みなさん、ご指導どうもありがとうございます。
バックアップはその三つをCRONすればいいだけなのですか。
恥ずかしながら知りませんでした。
排他処理とは、つまりトランザクション処理のことですね。
ファントムだとか、そりゃ色々あってややこしいですが、
アップサーバーに処理させます。
やっぱり、HSQLのファンは多いですね。嬉しいです。
またお話しさせてください。最新版のレポートでもさせて頂きます。 >>192
お先真っ暗なJavaだけどがんばってね。 >>192
排他要るならderbyって手も。速度は知らん。jarサイズはHSQLDBよりはデカい。 組み込み用途のDBなんでマルチユーザーとは使い方ちがうからな
複数のスレッドからのアクセスで排他制御が必要なら最大セッション数1の
コネクションプールみたいにしてやればいいだけだが、それならそもそもDBの選択を誤ってるとしか思えん
SQLiteとこっちどっち使おうか迷う。
JNIらなくていい分こっちのが楽なんだろうけど。 1.8落としてみたんだけど
標準でdataディレクトリが無いのは何故?
あんなプチ嫌がらせを受けるとは思いもしなかったw >>199
HSQLDBがどういうものかわかってないのか >>200
demoディレクトリがdataディレクトリを参照してるんですがそれが何か? 同じ実行ファイルを連続して起動すると(同時実行ではない)
The database is already in use by another process
このようなSQLExceptionが発生するのですが、何が原因なのでしょうか?
memモードだとこの現象は起きず
fileモードだと発生するようです。 (同時実行ではない) って書いてるじゃん。
rs, stmt, connと全てcloseしても起きてるから何がなんだか。 OSのファイルロックが外れるのが遅いとかの理由かな? >>203
1.7.3からshutdownコマンド発行しないと.rockファイルが消えなくて、
同時実行とみなされちゃうように仕様が変わったみたいだけど、
それと関係あるかな?
shutdownコマンド発行するか、手動で.rockファイルを消せば、
同時起動だって怒られない。 するってーとshutdown=falseで接続して
最後にshutdownせずにアプリを落とすと、次回から
.lockファイルを消してからじゃないと接続できないってか?
なんか恐ろしく意味の無い仕様な気がする。
最近のバージョンはlockファイルの開放妙に遅いし。 lockする以外の恩恵をshutdownで開放してるんだろうか?
closeの前にdisposeが必要な仕様ってのも理解できない
ってかそんな仕様お目にかかったこと無い 組み込みDBなんだからアプリが起動中はつかみっぱなしで問題ないということで
あまりテストはされてない予感
実際あまり問題はないけどな shutdown=trueでもアプリが予期せず落ちると、
たまにlockファイルを残す場合があるな。 ちょっと困る。
ドライバの実装による問題なのかもしれんが、なんとかしてもらいたいところ。 プロセスが死んでもつかみっぱなしってWindowsならよくあるな HSQLDBを勉強したいのですが、日本語マニュアルとか日本語の
解説本とかがあるのでしょうか。amazonで調べてみましたが、
HSQLDBがテーマの本はありませんでした。
いろんなWebページを読みふけるのもいいのですが、それだと
知識が断片的になりそうでこわいです。 >>215
一番いいのはHSQLDBのドキュメント。
日本語リソースは…期待しない方がいい。
一度WEB+DB PRESSかなんかで見たことがあるだけ。
ApacheのDerbyスレが無いけど、建てていいんかしらん? >>217
ぜひお願いします。
テンプレでCloudscapeのフリー版でDB2互換であり、
Cloudscapeの日本語マニュアルが使えると説明すると
Derbyユーザを増やすのに役立つとおもいます。
The Apache Derby Project
http://db.apache.org/derby/
IBM Cloudscape インフォメーション・センター
http://publib.boulder.ibm.com/infocenter/cldscp10/index.jsp
Publications home (CloudscapeマニュアルPDF版30冊)
(マニュアル検索をクリック、キーワードCloudscape、表示結果数100で検索)
http://www.elink.ibmlink.ibm.com/puc/jsp/index.jsp?country=J1&language=JPN
Cloudscapeと3つの「C」
http://www-6.ibm.com/jp/developerworks/ysl/j_ysl-cloud.html
IBM Cloudscape、Apache Derbyについて
http://timescape.jugem.jp/
Unofficial DB2 BLOG
http://db2.jugem.cc/
IBM DB2 スレ (関連スレ)
http://pc8.2ch.net/test/read.cgi/db/1057170768/ HSQLDBで、resultsetの行数を知る方法はどうやったらいいの?
resultset.last()も、count()関数もなんか例外でるんだけど…
1行ずつ読んで全部配列に読み込むのが一番早い? スタンドアロンモードでは、マルチスレッドでアクセス
は不可なの?(ていうか不可でした)
ver1.7.2使っててるんだけど...
ver1.8.0だと方法はあるのかな?
それともサーバモードにしないとだめなのか...
どなたか教えてください! どのモードだろうが排他制御がない時点で2層式は無理
工工エエェェ(´д`)ェェエエ工工
うちは2槽式使ってるよ。 >>224 自己レスです。
すいません。使ってたのはver1.7.1でした。
ver1.7.2に変更したら
スタンドアロンモードでマルチスレッドでアクセス
出来ました。
SHUTDOWN がめんどくさいですけど・・ マルチスレッドは対応しても排他制御が出来ないんじゃ
あまり意味はないぞ コネクションプールつくってプール数1にするしかないね HSQLDBの血を継ぐ"H2 Database Engine" - 高速/軽量/組み込み/サーバ両対応
ttp://pcweb.mycom.co.jp/news/2006/01/18/094.html テーブル単位とはいえロックがやっと入ったか
大分いい感じだが、軽量という部分をどれだけ維持できるか
あとはHSQLDBの問題だったJDBCドライバレベルの話だな
>234
起動が早いかどうかはともかく(Javaだし)、
Win以外へのセットアップがメンドイ。
インスコしたあとに、ttp://hogefuga:8082/やろうとすると.h2.server.properties が必要になるから、
それをWinのh2で作ってコピーしてやらないとlocalhost以外からのアクセスが出来ないし。
まぁ、あとはHSQLDBと同じカンジ。
H2使ってみたが、UIをFirefox用にxulな感じで吐いてくれて素敵。
derbyよりはずっと軽い印象。 あと、構文とかDB2に似てる。 DerbyよりDB2に似てるって言われちゃったらIBMも形無しだなw Derby(Cloudscape)はIBMがInfomixから得たものだし、DB2と違ってても不思議じゃない。
(…と、DB2と違うとこが不満だけど、こう思ってあきらめてるオレ) HSQLDB for .NET みたいのって、どっか無いのかよ…… h2だったらODBCがある。SQLiteだったら↓がある。
ttp://sourceforge.net/projects/adodotnetsqlite
h2のODBC接続って、別プロセスでサーバとして起動してそこに接続ってことでしょ。
そんなことするくらいなら、mysqlとかpostgresとか使うと思われ。 >>240
無償じゃないけどあるよ
Accessっていうんだ。 CSVのデータをテーブルに流し込んでやる事は出来るんじゃろうか。
コードを書かずに…どなたか教えてください。 >>244
ttp://www.hsqldb.org/doc/guide/ch06.html 教えてください。
HSQLを立ち上げると
java.sql.SQLException: socket creation error
at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at org.hsqldb.util.ConnectionDialog.createConnection(Unknown Source)
at org.hsqldb.util.DatabaseManager.main(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.hsqldb.util.DatabaseManager.execute(Unknown Source)
at org.hsqldb.util.DatabaseManager.actionPerformed(Unknown Source)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
となります。
どうすれば使えるようになるのか、知っている方教えてください。
よろしくお願いします。