2013年06月

      1
2345678
9101112131415
16171819202122
23242526272829
30      

最近のコメント

« ホームページはどこですか? | メイン | 年々衰え行くものを感じる今日この頃 »

SQLiteをJavaで使う

何故わざわざJavaで使うのかwww

「やってみたかっただけなんです。本当にすみませんでした。」

まぁ、問題アリだったりするんですが、せっかく調査したので記事にします。

まず、実行した環境

・Java2SE 1.5.0_04
・Eclipse3.1.1

大雑把にはこんなもんか。
必要なライブラリ
SQLiteJDBCから、現最新バージョンのv033をダウンロード
Eclipse使うなら、プロジェクトのビルドパスに追加しておくこと
使わないなら、各自の環境に合わせてコンパイル時・実行時に参照できるようにしておく。

c:\sqlite なんてDB保存ディレクトリを用意しておく(後述のソース実行時に必要)
ソース書き換えが必要になりますが、別の場所でも構いません。

サンプルソース SQLiteTest.java(パッケージは好きにしてください)
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:/c:/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();
    }
}

とまぁ、こんな感じであっさり済んだんですが、
冒頭でふれた問題ってやつがありまして、

このJDBCドライバが、SQLite3系にしか対応してない。

SQLite2系と3系とでは、DBファイルに互換性が無いらしく、
このブログのレンタルサーバであるチカッパ!のSQLiteが2系だから、ローカル環境との相互運用的なことができないので、その辺にガッカリ。。
SQLite2系も対応していそうなJDBCドライバもあるようだけど(ここ)こいつでうまくいくかどうかは、また別の機会に。
コンパイル済みのバイナリが、JDK1.4系でのコンパイルなのが気がかり・・・

【関連記事】
SQLiteManager 導入メモ

トラックバック

このエントリーのトラックバックURL:
http://mt.uhawwwokkwwwww.com/mt-tb.cgi/16

コメント (2)

You are so awesome for helpnig me solve this mystery.

GwwML8 edwxlwtcxsmt

コメントを投稿

Powered by
Movable Type 3.35

About

2007年04月12日 12:58に投稿されたエントリーのページです。

ひとつ前の投稿は「ホームページはどこですか?」です。

次の投稿は「年々衰え行くものを感じる今日この頃」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。