ruby/java から sqlite3 をつかう
郵便番号を sqlite3 に格納した。
それを ruby から activerecored で アクセスすることができた。
jruby からのアクセスはまだできていない。
(activerecord-jdbc をつかってできるはず。
その為の準備として、sqkite3 の jdbc ドライバー動作は確認できているが...)
参照:
- http://d.hatena.ne.jp/rudeboyjet/20060723
> > よしだメモ: ダミーの住所データを作るスクリプト
- http://www.tuyudaku.net/sqlite/import.html
> > SQLite - CSVファイルのインポート
- http://blog.uhawwwokkwwwww.com/2007/04/sqlitejava.html
> > SQLiteをJavaで使う
数日中には、xfy/xvcd から jruby でsqlite3 アクセスできるようにしたい。
(java からのアクセスができているから、この方法でxfy/xvcd から
sqlite3 アクセスする xpath関数、instruction をつくるのは簡単なはず。
でも、java で書く データベースアクセスは面倒だから、jruby で書きたいのだ!)
ruby でアクセス例:
=================
$ cat zips-sample.rb
require 'rubygems'
require 'active_record'
require 'sqlite3'require 'kconv'
require 'pp'$KCODE = 'u'
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => 'zips.db'
)class Zips < ActiveRecord::Base
end# z = Zips.find(:all)
# z.each { |v|
# p v
# }f = Zips.find_by_id(1)
pp f
pp "id = " + f.id.to_s
pp "city = " + f.city
pp "code = " + f.code#--- End of File ---
gem で 次のものを install した環境で動作している。
sqlite3-ruby (1.2.1)
activerecord (1.15.3)
java でのアクセス例:
=================
$ cat SQLiteTest.java
// See http://blog.uhawwwokkwwwww.com/2007/04/sqlitejava.html
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class SQLiteTest {
// 指定パスにDBファイルが無い場合は勝手に作ってくれるっぽい
private static final String DB_URL = "jdbc:sqlite:TestDB";
private static final int INSERT_MAX = 5;public static void main(String[] args) throws Exception {
Connection c = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection(DB_URL);// AutoCommitはFalseだろ・・・常識的に考えて
c.setAutoCommit(false);// あれこれSQLを実行
// まずテスト用テーブル作成
String sql
= "create table uhawwwokkwwwww("
+ " key int not null primary key"
+ ",name varchar);";
st = c.prepareStatement(sql);
int ret = st.executeUpdate();
System.out.println("テーブル作成:" + ret);
st.close();
st = null;// 次にデータ作成
sql = "insert into uhawwwokkwwwww"
+ " values(?,?)";
st = c.prepareStatement(sql);
for (int i = 0; i < INSERT_MAX; i++) {
int cnt = 1;
st.setInt(cnt++, i + 1);
st.setString(cnt++, "うはwwwおkk" + repeatString(i, "w"));ret = st.executeUpdate();
System.out.println("データ作成" + i + ":" + ret);
}
st.close();
st = null;// データ取得
sql = "select x1.key, x1.name from uhawwwokkwwwww x1;";
st = c.prepareStatement(sql);
rs = st.executeQuery();
System.out.println("データ取得開始=====================");
while (rs.next()) {
int key = rs.getInt("key");
String name = rs.getString("name");
System.out.println("Key:" + key + " Name:" + name);
}
System.out.println("データ取得完了=====================");
rs.close();
rs = null;
st.close();
st = null;
// テーブル削除
sql = "drop table uhawwwokkwwwww;";
st = c.prepareStatement(sql);
ret = st.executeUpdate();
System.out.println("テーブル削除:" + ret);
st.close();
st = null;} finally {
// この辺は、お約束/おまじないの類
if (rs != null) {
rs.close();
rs = null;
}
if (st != null) {
st.close();
st = null;
}
if (c != null) {
c.close();
c = null;
}
}
}/**
* 指定回数指定文字を繰り返すくだらないメソッド
* @param cnt 繰り返す数
* @param s 繰り返す文字
* @return 処理結果の文字列
*/
private static String repeatString(int cnt, String s) {
StringBuffer sb = new StringBuffer(s.length() * cnt);
for (int i = 0; i < cnt; i++) {
sb.append(s);
}
return sb.toString();
}
}
$ javac cp=. SQLiteTest.java
$ java -cp sqlitejdbc-v036-native.jar:. -Djava.library.path=. SQLiteTest
jdbc ライブラリーは http://www.zentus.com/sqlitejdbc/ から v036 を download した。
最近のコメント