有馬総一郎のブログ

(彼氏の事情)

2013年03月31日 18:46:00 JST - 3 minute read - Subsonic

Subsonicのテーブルがどうなっているか知りたい

BINARYのデータも移行したくて、あれこれ調査してみた。subsonicのDBはhsqldbを使用している。

hsqldbは、DB管理はDBManagerというのが、準備されている。

sudo java -cp /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.util.DatabaseManager

有馬総一郎のブログ

これはGUIの管理ツールなので、サーバー上では、実行できない。それは当然として、じゃあCLIの管理ツールとしてSqlToolが準備されているようななので、homeディレクトリに

urlid subsonic
url jdbc:hsqldb:hsql://localhost:[port番号]/subsonic
username sa
password

と記述されたsqltool.rcファイルを作成する。urlは通常、subsonicにアクセスするurlを記述(port番号も同じ)。urlidはSqlToolを起動するときの、db名になるので、なんでも良い。で、実行。

sudo java -cp /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.util.SqlTool --rcfile \~/sqltool.rc subsonic

有馬総一郎のブログ

java.sql.SQLException: Connection is broken: java.io.EOFException
at org.hsqldb.jdbc.Util.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:620)
at java.sql.DriverManager.getConnection(DriverManager.java:200)
at org.hsqldb.util.RCData.getConnection(Unknown Source)
at org.hsqldb.util.SqlTool.main(Unknown Source)
Failed to get a connection to jdbc:hsqldb:hsql://localhost:xxxx/subsonic
as sa. Connection is broken: java.io.EOFException

有馬総一郎のブログ

とエラーが出てできない。ちなみに外からDBManager使ったり、LibreOffice Baseを使っても同様にConnection is brokenで駄目。url自体が間違っているか、hsqldbが起動していないと

java.sql.SQLException: socket creation error

が出るので、接続先は合っている、起動もしている。

これは埋込でスタンドアローン・モードで起動しているから無理なのか?と思い、subsonicを停止。

sudo java -classpath /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.Server -database.0 /var/subsonic/db -dbname.0 subsonic

有馬総一郎のブログ

サーバー・モードで起動。そして、別セクションから、sqltool.rcを編集しなおす。

urlid subsonic
url jdbc:hsqldb:hsql://localhost/subsonic
username sa
password

そして、上記コマンドを再実行。接続はできた。が!!!!\dtでテーブルを確認しても何も出ない。サーバー起動時のオプションが間違っているのか?

有馬総一郎のブログ

sql> \dt
TABLE_SCHEM TABLE_NAME
----------- ----------

0 rows

うーむ。どういうこっちゃ。これではテーブルのエクスポートとかできない。やっつけで、仕組もろくに理解せず、やっているからな・・・ともあれ、これはこれで外部からDBからイジられることがないということが分かって安心した。にしても、せめてテーブルのカラムのデータ型とか調べたい・・・

とりあえず、どんなテーブルが有るか知りたければ、

SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES

を叩けば、そこから頑張って調べていける事がわかった。

有馬総一郎のブログ

カラムを調べるには、

select TABLE_NAME, COLUMN_NAME, TYPE_NAME, BUFFER_LENGTH, IS_NULLABLE from INFORMATION_SCHEMA.SYSTEM_COLUMNS where TABLE_SCHEM = 'PUBLIC' order by TABLE_NAME

主キーを調べるには、

select TABLE_NAME, COLUMN_NAME, KEY_SEQ, PK_NAME from INFORMATION_SCHEMA.SYSTEM_PRIMARYKEYS order by TABLE_NAME

とすれば、調べられた。

しかし、一番の目的であるBINARY型のデータも移行はできないぞ!SqlTool、DatabaseManagerを使えれば、それが可能っぽいのに!ちょっと詰まってきたので、今日はこれで終わっておく。


追記: 2013-03-31
繋げれた! 次の日記参照
追記ここまで

Tags: Subsonic HSQLDB

Subsonicのアップグレードのやり方 SubsonicのDataBaseをsqltoolで覗く