何故わざわざJavaで使うのかwww
「やってみたかっただけなんです。本当にすみませんでした。」
まぁ、問題アリだったりするんですが、せっかく調査したので記事にします。
まず、実行した環境
・Java2SE 1.5.0_04
・Eclipse3.1.1
大雑把にはこんなもんか。
必要なライブラリ
SQLiteJDBCから、現最新バージョンのv033をダウンロード
Eclipse使うなら、プロジェクトのビルドパスに追加しておくこと
使わないなら、各自の環境に合わせてコンパイル時・実行時に参照できるようにしておく。
c:\sqlite なんてDB保存ディレクトリを用意しておく(後述のソース実行時に必要)
ソース書き換えが必要になりますが、別の場所でも構いません。
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 導入メモ

最近のコメント