already closed
model操作時に現れるエラーメッセージ。model.close() が実行されると、リソースが開放されてしまい、それ以降ではmodelを参照できない。
スレッドでclose()が呼び出されていないかどうか要チェック。
Exception in thread "main" com.hp.hpl.jena.shared.ClosedException: already closed
RDBM(Relational DataBase Management System)には、MySQLをはじめいくつかのソフトウェアがあるが、個人で開発を行うような小中規模なアプリケーションではSQLiteがオススメだ。
Javaからデータベースを操作するためには、それぞれのRDBM用のJDBC(Java DataBase Connectivity)というAPIを用いる。
SQLite公式DownloadPageから環境に合わせた"command-line shell"をダウンロードし、適当なディレクトリに解凍する。インストールは以上。
sqlite3.exeを実行し、コマンドを叩く。
コマンドについては参考URLを参照。
SQLite-JDBCのダウンロードページから最新バージョンの*.jarファイルをダウンロードする。適当なディレクトリに解凍する。
classファイル実行時のクラスパスにjarファイルを含める(IDEではプロジェクトのライブラリにjarファイルを追加する)。
SQLite-JDBCのサンプルプログラムがわかりやすい。
SQLite公式
愚鈍人 JavaとSQLiteデータベース
DBOnline SQLite入門
sqlite-jdbc配布ページ
Jarファイルのメインクラスの確認の仕方
次のいずれかの方法でJarファイルを解凍する
を開く
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.sparql.util.StringUtils;
public class Virtuoso {
public static void main(String[] args) {
String service = "http://dbpedia.org/sparql";
String queryString =
"PREFIX rdfs: "+
"SELECT ?x ?y "+
"WHERE {?x rdfs:label ?y}";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);
try {
ResultSet results = qe.execSelect();
for (; results.hasNext();) {
QuerySolution soln = results.nextSolution();
RDFNode x = soln.get("x");
RDFNode y = soln.get("y");
System.out.println(x.toString());
System.out.println(y.toString());
}
} catch (Exception e) {
System.out.println("Query error:" + e);
} finally {
qe.close();
}
}
}
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 19609276 4506940 14106240 25% / udev 505076 4 505072 1% /dev tmpfs 204956 788 204168 1% /run none 5120 0 5120 0% /run/lock none 512384 156 512228 1% /run/shm