こんにちは、田渕です。
普段は、PostgreSQLやMySQLなどのRDBを使用して、Webシステムを制作することが多いのですが、
様々なところで目にする機会が多い、SQLiteを複数プラットフォームで動かしてみようと思います。
はじめに
複雑なデータ処理には、PostgreSQLやMySQLなどのクライアント/サーバ構成のデータベースが便利ですが、ちょこっとしたデータの保存のために、データベースを構築するのは手間がかかります。
SQLiteは、複数クライアントでデータを共有する目的ではなく、アプリケーションデータの永続化に使用する用途で使われることが多いデータベースです。
また、サイズも軽く構築も簡単なため、会社など開発環境の整った環境ではなく、家の貧弱なノートPCなどで、ちょこっとプログラムの検証したりする際に、とても便利です!
特徴
特徴は、たくさんあるのですが、ここでは紹介しきれないので。。。おおきく2つ。
SQLiteは、標準SQL規格のSQL92に多く対応しているため、普段PostgreSQLなどで開発している人は、ストレスなく使用することができます。
また、SQLiteはパブリックドメインとして提供されており、改変や再配布も自由に行えることから、広く使われています。スマートフォンのアプリにも多く内包してありますね。
セットアップ
SQLiteはこちらからダウンロードします。
http://www.sqlite.org/
Windows版、Linux版など、環境にあったものをダウンロードします。
ここでは、Windows版をダウンロードします。ダウンロードしたzipファイルを解凍して、コマンドプロンプトで解凍ディレクトリに移動します。
そして、下のコマンドを入力すれば、データベース作成完了!
1 |
sqlite3 hoge.db |
今回は、データベース名に「hoge.db」を指定します。この時点では、まだデータベースファイルは作成されていません。テーブルを作成すると、ファイルが作成されます。
次に、テーブルを作成します。今回は、fruitsテーブルを作成します。
1 |
create table fruits(name); |
※SQLiteは、データ型を指定する必要がありません。もちろん指定することもできます。サポートしているデータ型は、NULL/INTEGER/REAL/TEXT/BLOBです。
CREATE TABLEが完了すると、ディレクトリ配下に、hoge.dbファイルが作成されていることが確認できます。SQLiteは、データベース1つにつき、1ファイルが生成されます。バックアップも楽ちんですね。
次に、データを登録します。
1 2 3 4 |
insert into fruits values('apple'); insert into fruits values('orange'); insert into fruits values('banana'); insert into fruits values('peach'); |
次に、登録したデータを確認します。
1 |
select * from fruits; |
1 2 3 4 |
apple orange banana peach |
終了する場合は、.exit と入力します。
検証
次に、このデータをLinux上へ持っていきましょう。
Linux版のSQLiteをダウンロードし、zipファイルを適当な場所に解凍します。そのフォルダに、先ほどWindows上で作成したhoge.dbを配置します。データベースに接続し、データを読むことができるか確認します。
まずは、hoge.dbに接続します。
1 |
sqlite3 hoge.db |
次に、データを参照します。
1 |
select * from fruits; |
1 2 3 4 |
apple orange banana peach |
Windowsで登録した内容が、そのまま表示されます。異なるプラットフォームでも、問題なく動作することが確認できました。日本語を入力する場合は、文字コードを統一すれば、問題なく読み書きできます。
次に、Javaプログラムから、SQLiteのデータを読み込んでみましょう。
JavaからSQLiteへアクセスするには、おなじみのJDBCドライバーが必要となります。こちらからダウンロードし、クラスパスに設定します。
https://bitbucket.org/xerial/sqlite-jdbc/downloads
そして、SqliteSample.javaファイルを作成し、以下コードを記述します。
※ /path/to/hoge.db はお使いの環境に合わせて変更してください。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqliteSample { public static void main(String[] args) { Connection connection = null; Statement statement = null; try { Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection("jdbc:sqlite:/path/to/hoge.db"); statement = connection.createStatement(); String sql = "select * from fruits"; ResultSet rs = statement.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString(1)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (statement != null) { statement.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } |
以下コマンドで、実行します。
1 |
java -classpath .:sqlite-jdbc-3.8.7.jar test.SqliteSample |
コンソールにテーブルデータが表示されれば成功です。
1 2 3 4 |
apple orange banana peach |
このように、普段のJavaのデータ操作と同じ要領で記述できます。
さらに、Androidアプリの開発環境では、標準でSQLiteがついており、SQLiteOpenHelperが準備されてますので、データの操作がより簡単にできると思います。
各プログラム言語との親和性の高いSQLite、とても便利ですね。ぜひ、お試しください。
最後まで読んでいただき、ありがとうございました。