image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ:触ってみておくべきオープンソース『Ext』, 「webを読む」という新しい習慣, etc... | トップページ | ActiveRecord-JDBC は まだsqlite は未サポートだった »

2007-07-21

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 した。


« ピックアップ:触ってみておくべきオープンソース『Ext』, 「webを読む」という新しい習慣, etc... | トップページ | ActiveRecord-JDBC は まだsqlite は未サポートだった »

コメント

NetBeans初心者なんですが、
SQLiteTest.java のサンプルコード、ものすごく助かりましたです。

NetBeansでSQLiteをpureJavaドライバでどう設定し動かすかがよく分からず、
悩みまくっていたもので。(すいません。初心者なんです)

書籍のコードは動かなくても、あなたのコードは動いたw
これで、ようやくNetBeansでSQLiteを使える。ありがとー。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/15829906

この記事へのトラックバック一覧です: ruby/java から sqlite3 をつかう:

« ピックアップ:触ってみておくべきオープンソース『Ext』, 「webを読む」という新しい習慣, etc... | トップページ | ActiveRecord-JDBC は まだsqlite は未サポートだった »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク