2012年1月23日月曜日

JDBCで使えるURL一覧

JDBCに指定するURLとDriverClassのまとめ




DB名DriverClass種別url
MySQLcom.mysql.jdbc.Driverサーバーjdbc:mysql://[server_name]:[port=3306]/[database_name]
H2DBorg.h2.Driverサーバーjdbc:h2:tcp://[server]:[port]/[path]/[database_name]
ファイルjdbc:h2:file:[path][database_name]
メモリjdbc:h2:mem:[database_name]
Oracleoracle.jdbc.driver.OracleDriverサーバーjdbc:oracle:thin:@[server_name]:[port=1521]:[database_name]
Microsoft SQL servercom.microsoft.jdbc.sqlserver.SQLServerDriveサーバーjdbc:microsoft:sqlserver://[server_name]:[port=1433]/[database_name]; DatabaseName=[database_name]
Derbyorg.apache.derby.jdbc.EmbeddedDriverファイルjdbc:derby:[path]/[database_name];create=true
メモリjdbc:derby:memory:[database_name]
PostgreSQLorg.postgresql.Driverサーバーjdbc:postgresql://[server_name]:[port=5432]/[database_name]
Sqliteorg.sqlite.JDBCファイルjdbc:sqlite:[path]/[database_name]
org.sqlite.JDBC

2012年1月7日土曜日

Scalaの標準jsonライブラリの使い方

意外にscala標準ライブラリのjsonライブラリの説明をしてくれているサイトが少ないので自分で試したことをまとめ。



ちなみに、簡単なJSONをパースするだけなら、標準ライブラリでいい気はするけど、
オブジェクトのJSON化したいなら、sjsongsonなどのライブラリを使用したほうがよさそうです。



JSONのパース



JSONのパースはscala.util.parsing.json.JSONクラスを使います。parseFullとparseRawの2つのメソッドがありますが、動作は同等です。パースしたJSONは以下のようなscalaのクラスにマップされます。

JSON typeJSON.parseFullJSON.parseRaw
JSON MapMap[String,Any]JSONObject
JSON ArrayList[Any]JSONArray
文字列StringString
数値DoubleDouble


コードではこのような感じになります。

import scala.util.parsing.json.JSON;

val json : Object[Any] = JSON.parseFull("""
{
"key1" : "string",
"key2" : 20,
"key3" : ["Array",1],
"key4" : {
"key5" : "hoge"
}
}
""")

/*
このようなオブジェクトが帰ります
json.get == Map(
"key1" -> "string",
"key2" -> 20.0,
"key3" -> List("Array",1.0),
"key4" -> Map( "key5" -> "hoge")
)

*/



数値がDoubleにマップされるのに注意してください。
また、jsonフォーマットが間違っている場合などは、戻り値がNoneとなります。




JSON化



JSON化にはJSONObject,JSONArrayを使います。


JSONObject(Map(
"key1" -> "string",
"key2" -> 20,
"key3" -> JSONArray(List("Array",1)),
"key4" -> JSONObject(Map( "key5" -> "hoge"))
)))


JSONObjectやJSONArrayで囲まないとだめなのが超イケてない。

2012年1月6日金曜日

Scalatraでオレオレ例外をErrorHandling

Scalatraでは、errorメソッドを使うことで処理中に投げられた特定の例外を捕まえて、途中処理を挟むことができます。そのまま例外を投げ返すことで、HttpStatus=500(Internal server error)の結果をブラウザへと返してくれます。


class MyFilter extends ScalatraFilter {

error{
case e : MyException => {
// do anything.
throw e
}
}
}



ただ場合によっては、500番以外のHttpStatusCodeも返したいということもあると思います。
その時は次のようにすることで、特定の例外をキャッチして好きな結果を返すことができます。




class MyFilter extends ScalatraFilter {

error{
case e : NullPointerException => {
response.setStatus(200)
response.addHeader("Content-type","text/plain")
renderResponse("ガッ")
}
case e : AzunyanException => {
response.setStatus(400)
response.addHeader("Content-type","text/plain")
renderResponse("ペロペロ")
}
}
}