手軽に利用できる関係データベースシステムの一つです。 データベースの内容を一つのファイルとして扱うため、組み込み用途に優れています。
特に、管理者権限を持たないレンタルサーバ等の環境では、 MySQLやPostgreSQL等を自分でインストールして利用することができないため、 SQLite(のような組み込み型のデータベース)の利用が選択肢となるでしょう。
一方で、高速な処理、柔軟な処理が要求される場面では、 SQLiteの機能では不十分だと感じる場面もあるかもしれません。 また、データ型の扱いに特有の癖があります。
SQLite公式ページ ( http://www.sqlite.org/ ) の「Download」から、環境に合わせて「command-line shell」を含むファイルを取得し、解凍して利用します。(解凍するだけで利用できます。)
端末から以下のコマンドでデータベースに接続します。
"sample.db"はデータベース名で、ここで指定した名前でファイルが作成されます。
既にファイルがある場合はそこから読み込まれます。
sqlite3 sample.db
Linux環境等では以下のようにします。
./sqlite3 sample.db
これだけで、通常のSQLによるデータベース操作(create table、insert、select等)が可能となります。
例えば、以下のような動作を確認できるでしょう。
テーブル products を作成。
sqlite> CREATE TABLE products (pid INTEGER, name VARCHAR(20), price INTEGER, PRIMARY KEY (pid));
products にデータを挿入。
sqlite> INSERT INTO products VALUES(1, 'AAA', 100); sqlite> INSERT INTO products VALUES(2, 'BBB', 80); sqlite> INSERT INTO products VALUES(3, 'CCC', 220);
products の中身を確認。
sqlite> SELECT * FROM products;
select文の結果は以下のようになるはずです。
1|AAA|100 2|BBB|80 3|CCC|220
テーブル products を削除。
sqlite> DROP TABLE products;
SQLiteターミナルから出るには
sqlite> .exit
と打ちます。
「.」から始まるのはSQLite独自コマンドです。以下はその一部です。
その他、SQLiteのCommand Line Shellの使い方は http://www.sqlite.org/cli.html から確認できます。
ここではJavaプログラムからSQLiteを利用する例を示します。Javaプログラムから関係データベースを操作する場合、対応するJDBCドライバが必要です。
SQLiteでは、SQLite JDBC Driver ( https://github.com/xerial/sqlite-jdbc ) を利用するのが楽でしょう。ダウンロードページ ( https://github.com/xerial/sqlite-jdbc/releases ) から sqlite-jdbc-(version).jar *1 を取得して、プログラムを実行するディレクトリに置いてください。
ここでは、以下のファイルをダウンロードしたものと想定して説明を続けます。
jarファイルを利用する場合、コンパイルおよび実行は以下のようにします。
javac SQLiteSample1.java java -classpath ".:sqlite-jdbc-3.32.3.2.jar" SQLiteSample1
-classpath は単に -cp としても同じ動作となります。
java -cp ".:sqlite-jdbc-3.32.3.2.jar" SQLiteSample1
(参考) なお、Windows環境ではclasspathの区切り文字として":"ではなく";"を用います。またWindows版JDKのjavacでは、UTF-8で書かれたJavaプログラムをコンパイルする際、明示的なエンコーディング指定が必要です。
javac -encoding utf-8 SQLiteSample1.java java -cp ".;sqlite-jdbc-3.32.3.2.jar" SQLiteSample1
以下の SQLiteSample1.java はデータベースに接続するサンプルプログラムです。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SQLiteSample1 { public static void main(String[] args) throws SQLException { String dbname = "sample.db"; // 利用するデータベースファイル Connection conn = null; try { Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:" + dbname); System.out.println("接続成功"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
プログラム中のdbnameで利用するデータベースファイルを指定してください。
期待される実行結果は以下の通りです。
接続成功
以下の SQLiteSample2.java はデータベースに接続し、テーブル作成、データ挿入、選択、テーブル削除するサンプルプログラムです。
(注意) プログラム中で"products"という名前でテーブルを作成、削除しているため、この名前で既にテーブルを作成している場合は別の名前に置き換えてください。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SQLiteSample2 { public static void main(String[] args) throws SQLException { String dbname = "sample.db"; // 利用するデータベースファイル Connection conn = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:" + dbname); System.out.println("接続成功"); stmt = conn.createStatement(); stmt.executeUpdate("CREATE TABLE products (pid INTEGER, name VARCHAR(20), price INTEGER, PRIMARY KEY (pid))"); System.out.println("テーブル作成"); stmt.executeUpdate("INSERT INTO products VALUES(1, 'AAA', 100)"); stmt.executeUpdate("INSERT INTO products VALUES(2, 'BBB', 80)"); stmt.executeUpdate("INSERT INTO products VALUES(3, 'CCC', 220)"); System.out.println("データ挿入"); ResultSet rs = stmt .executeQuery("SELECT * FROM products WHERE price >= 100"); System.out.println("選択"); while (rs.next()) { int pid = rs.getInt("pid"); String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(pid + "\t" + name + "\t" + price); } rs.close(); stmt.executeUpdate("DROP TABLE products"); System.out.println("テーブル削除"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
期待される実行結果は以下の通りです。
接続成功 テーブル作成 データ挿入 選択 1 AAA 100 3 CCC 220 テーブル削除
ここではSQLiteへのアクセスについて示しましたが、他の多くの関係データベースも同様の記述方法で利用できます。