◆PROCESSING 逆引きリファレンス
カテゴリー:ファイル操作
SQLiteを使う(オープン・クローズ)
【概要】
様々なデータを手軽に、無償でサクサクと管理したい場合にピッタリなのがSQLiteデータベースです。
SQLiteはパブリックドメインで公開されているデータベースで
- 軽量(単一DBファイルとライブラリで動作する)
- 手軽(特別なセットアップやツールを必要としない)
- 多機能(標準的なSQLの多くに対応している)
- プログラマブル(スレッドセーフで多言語対応)
といった優れた特徴を持っています。
Androidにも組み込まれていますので、スマホのプログラムを作る人にはお馴染みかもしれませんね。
SQLiteは様々なプログラミング言語から利用可能で、PROCESSINGの元となっているJavaからも利用できます。
今回は複数回にわけて、PROCESSINGにJava用のSQLiteライブラリ(jarファイル)を組み込んで利用する方法を紹介したいと思います。
まず初回は
- ライブラリの組み込み
- DBをOPENする
手順です。
【詳細】
最新のライブラリを入手する
PROCESSINGでSQLiteを使うなら、そのライブラリは Mavn Repository からダウンロードするのが便利です。2019年7月現在、Version 3.28.0 が公開されています。
3.28.0なら「sqlite-jdbc-3.28.0.jar」のようなファイルがダウンロードできると思いますので、なるべく新しいものを入手しておいてください。
Intellij IDEAなどのIDE経由で開発をされている人なら、GradleやMaven経由で取得すれば良いでしょう。
PROCESSINGで利用できるようにする
まずPROCESSINGの標準エディタから「新規プロジェクト」を作成し、空で良いので一度保存します。
なお保存前に「ファイル→設定」で、スケッチブックの場所に「わかりやすいパス」が指定されている事を確認してください。
上記例なら、スケッチを保存すると「D:\processing-3.5.3\src」に「sketch_190721a」などのフォルダが作成され、空のプログラムソースファイルができあがります。
このフォルダ(D:\processing-3.5.3\src\sketch_190721a)配下に、code フォルダを作成してください。
続いて、上記でダウンロードした jarファイルを、code フォルダの中に複写します。
SQLiteのライブラリを利用する場合は、PROCESSINGのスケッチの先頭に以下の import 文を追記します。
import java.sql.*;
これで準備完了です。標準エディタを開いている人は、一度PROCESSINGを終了して、標準エディタを再起動してください。
DBをOPENする
それでは、さっそくDBをOPENしてみましょう。
SQLiteでは他の商用DBとは違い、データベースファイルはローカルPCの中にある単一ファイルとして管理されます。
DBオープン時にDBファイルがなければ自動生成されます。あれば、そのファイルを開いてライブラリ経由でアクセスできるようにしてくれます。
DBのOPENは、JavaのDriverManagerクラスがもつgetConnection()メソッドで行います。
DB接続Connection conn = DriverManager.getConnection( String url );
conn : DBへの接続オブジェクト
url : DBファイル名。SQLiteではローカルファイルパス
OPENするDBファイル名はURL形式で指定します。
これには約束があり、必ず「jdbc:<DBの種類>:」で始まる必要があります。SQLiteなら「jdbc:sqlite:」になります。
接続に失敗するとSQLException例外が発生するので、かならず例外処理を入れてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
try{ //JDBCドライバを明示的にロードする Class.forName("org.sqlite.JDBC"); //DBをOPENする conn = DriverManager.getConnection( "jdbc:sqlite:" + dbName ); } catch( ClassNotFoundException e){ //Driverのロード例外 e.printStackTrace(); } catch( SQLException e ){ //DB OPEN例外 e.printStackTrace(); } |
上記はDBをOPENする処理を抜き出したものです。
1 |
Class.forName("org.sqlite.JDBC"); |
などとして、なにやら怪しい処理を行っています。
これはDBにアクセスするためのJavaの共通的なドライバー(JDBC)に対し、いまからSQLiteを使うことを明示している処理になります。
ネット上で見かける多くのサンプルプログラムにこの記述がありますが、DriverManagerクラスの説明を見ると「必要ない」と書かれていますので、実は記述しなくても良さそうです(笑)。
私も念の為に記述していますが、手元の環境ではClass.forNameを記述しなくても動作しました。
DBをCLOSEする
DBのCLOSEには、getConnection()メソッドで得られたConnectionクラスのclose()メソッドを利用します。
OPENしたDBは明示的に close しなくても、Connectionオブジェクトが開放されるタイミングで自動的にcloseされるようですが、必要がなくなったら極力CLOSEしたほうが良いでしょう。
DB接続void conn.close();
conn : DBへの接続オブジェクト
引数などがないので、使い方は簡単ですね。
すでにクローズされたConnectionオブジェクトに対してclose()メソッドを呼び出すと、なにも操作は行われません。
【関連記事】
サンプルプログラム
SQLiteをOPENする例:
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 48 49 50 |
import java.sql.*; /** * PROCESSING3.0 SQLIte OPEN Sample * @auther MSLABO * @version 2019/07 1.0 */ Connection conn = null; void setup(){ //DBファイルはスケッチフォルダに生成する String dbName = sketchPath("test.db"); //DBをOPENする try{ //JDBCドライバを明示的にロードする Class.forName("org.sqlite.JDBC"); //DBをOPENする conn = DriverManager.getConnection( "jdbc:sqlite:" + dbName ); } catch( ClassNotFoundException e){ e.printStackTrace(); } catch( SQLException e ){ e.printStackTrace(); } finally { //DBをクローズする dbClose(); } println("DBをOPEN/CLOSEしました"); } void draw(){ } /** * DB CLOSE処理 */ void dbClose(){ //DBをクローズする try { if( conn != null ) { conn.close(); } } catch ( SQLException e ) { e.printStackTrace(); } } |
スケッチフォルダに test.db という名前のDBファイルを生成してOPENし、すぐさまCLOSEします(笑)。
成功するとスケッチフォルダに上記名前のファイルが出来上がります。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。