月曜日, 5月 11, 2009

【Google App Engine】 BigTableのJDBCラッパー jiql このエントリーを含むはてなブックマーク


GAE/JでSQLをどうしても使いたい方に朗報。jiqlというものを使えば、jdbc clientとしてBigTableに実際に保存されたデータにアクセスできるようになる。



これを使えるようにするには、jiqlのページから、jiql.jarとjiql.jspをダウンロードして、GAEアプリケーションに配置すればよい。それぞれ、WEB-INF/lib/の下と、./に置く。
ただし、jiql.jspにはBugがあり、jspコンパイル時にエラーとなるため、以下のように修正する。(try catchのスコープ外でString sql=""を定義する)

 jiql testpage

jiql testpageでは、hostやuser、password、datasourcenameを入れる箇所があるが、とりあえず何も入れないで、exampleのsqlを入れてqueryボタンを押すだけで実行結果が見れる。

ただ、JOINが使えないのを見ればわかるように、まだクラウドでSQLを使うのは無理があるように思う。将来使えるようになったとしても、トランザクションやパフォーマンスのことを考慮すると、結局クラウドの作法に立ち戻るはめになるだろう。個人的には、トランザクションプロセッシングを司るアプリからはSQLを無理に使うべきでないと思うし、使ったところで結局はO/Rマッパが必要となるので嬉しくない。
 SQLが真価を発揮するのは情報系データベースである。これは別システムとして立てることで、クラウドからデータを受け渡すようにすればよいと思う。



・・・
ResultSet result = null;

Connection Conn = null;


String status = "";
String url = "jdbc:jiql://local";
String host = "";
String password = "";
String user = "";
String dsName = "";
String sql ="";

if (request.getParameter("query") != null){

try{
sql = request.getParameter("sql");
if (sql == null || sql.length() < 1)
throw new SQLException("Please Enter a valid SQL Statement!");

Properties props = new Properties();
props.put("user",user);
props.put("password",password);

Class clazz = Class.forName("org.jiql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();

Conn = driver.connect(url,props);


Statement Stmt = Conn.createStatement();
Stmt.execute(sql);
result = Stmt.getResultSet();
status = sql + "
SQL COMPLETED SUCESSFULLY";
}catch (Exception ex){
status = "" + sql + "
SQL FAILED " + ex.toString() + "
";
ex.printStackTrace(response.getWriter());

}
//Conn.close();
}
・・・
以下同じ

0 件のコメント:

 
© 2006-2015 Virtual Technology
当サイトではGoogle Analyticsを使ってウェブサイトのトラフィック情報を収集しています。詳しくは、プライバシーポリシーを参照してください。