ProcessingとSQLiteを連携する


Processing3上からSQLiteを使ってデータベース操作する方法のまとめ。

以下のサイトを参考にしています。
http://mslabo.sakura.ne.jp/WordPress/make/processing%E3%80%80%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/sqlite%E3%82%92%E4%BD%BF%E3%81%86-db%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3/

sqlite-jdbcをスケッチフォルダ内に保存する。

まずはProcessingを開いて、ファイルを保存する。するとスケッチのフォルダが作成される。(今回は、DB_test_1.pdeとして保存してみる)

次に、ProcessingからSQLiteを操作するのに必要なJDBCをスケッチフォルダに保存する。

JDBCはSQL言語ごとに様々なものがあるが、SQLite用JDBCは以下のサイトから入手できる
https://github.com/xerial/sqlite-jdbc

入手したJDBCはスケッチフォルダ内に新たにcodeフォルダを作成し、その中に保存しよう。

これで事前準備完了。

JavaのSQLパッケージを利用したコードを記述する

ProcessingはJava環境なので、Javaのパッケージを利用することができる。JavaからSQLを利用する際には、java.sqlパッケージを利用しよう。

このjava.sqlパッケージ内には、DBMS(DataBase Management System)への接続・切断やSQL文を送信する際に利用できるクラスが含まれている。

今回は、DBMSへの接続準備を行うためのDriverManagerクラス、DBMSへの接続を行うConnectionクラス、SQL文を送信するためのStatementクラスを利用する。

最終的なコードは以下の通り。

DB_test_1.pde
import java.sql.*; // パッケージのインポート
Connection connection = null; // 接続のためのクラスを宣言

void setup(){
  // DBファイルをスケッチフォルダに生成するため、絶対パスを指定。もしtest.dbが存在しない場合はスケッチ実行時に、test.dbが新たに作成される
  String dbName = sketchPath("test.db");

  // OPEN DB
  try{
    connection = DriverManager.getConnection("jdbc:sqlite:" + dbName); 
    Statement statement = connection.createStatement();
    statement.setQueryTimeout(30); // set timeout to 30 sec

    statement.executeUpdate("drop table if exists person");
    // 新たにTableを作成するためのSQL文を送信
    statement.executeUpdate("create table person(id integer, name)");

    // 作成したTableにデータをInsertしてみる
    statement.executeUpdate("insert into person values(1, 'leo')");
    statement.executeUpdate("insert into person values(2, 'yui')");

    // Tableの中身をすべてSelectし、Resultsetクラスに読み込む
    ResultSet rs = statement.executeQuery("select * from person");
    while(rs.next()){ // ResultSetに読み込まれたデータを表示する
      // read the result set
      String format = "name: %4s, id: %4d";
      println(String.format(format, rs.getString("name"), rs.getInt("id")));
      //print("name: " + rs.getString("name"));
      //println(", id: " + rs.getInt("id"));
    }
  } catch( SQLException e ){
    println(e.getMessage());
  } finally{
    dbClose();
  }
}

// データベース終了時の例外処理をまとめただけの関数
void dbClose(){
  try{
    if(connection != null){
      connection.close();
    }
  } catch (SQLException e){
    e.printStackTrace();
  }
}

上記コードを実行すると、test_dbファイルが新規作成され、Processingのコンソールに挿入したデータが表示されます。

以上が簡単なデータベースの利用方法の説明となります。