2011年2月6日日曜日

Apache Derbyで指定されたパスのファイルを列挙する関数を作成する

Apache Derbyで指定されたパスのファイルを列挙する関数を作成するには、以下の手順を実行します。

1.以下のクラスをantでコンパイルします。
FsListFunction.java
package com.serverarekore.derby;
import java.io.*;
import java.sql.*;
import java.net.*;
// SimpleResultSetのため
import org.h2.tools.*;

public class FsListFunction
{
public static ResultSet fs_list(String path)
{
if( path == null )return null;
File file = new File(path);
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("NAME", Types.VARCHAR, 1024, 0);
String files[] = file.list();
for(int fi=0;fi<files.length;fi++){
rs.addRow(files[fi]);
}

return rs;
}
}

build.xmlファイル例
<project name="DerbyFunctions" default="compile" basedir=".">
<path id="lib.classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile">
<echo message="project: ${ant.project.name}"/>
<mkdir dir="build/" />
<javac srcdir="src/" destdir="build/"
deprecation="on" debug="on">
<classpath>
<path refid="lib.classpath"/>
</classpath>
</javac>
<jar destfile="c:\share\derby_funcs\FsListFunction.jar"
basedir="build"/>
</target>
<target name="clean">
<delete dir="build" />
</target>
</project>


※libディレクトリにH2 DatabaseのSimpleResultSetクラスを使用するために
h2-1.3.149.jarをコピーしておきます。

2.derbyにjarをインストール
call sqlj.install_jar('c:\share\derby_funcs\h2-1.3.149.jar', 'APP.func9', 0);
call sqlj.install_jar('c:\share\derby_funcs\FsListFunction.jar', 'APP.func10', 0);

3.クラスパスに通す
call syscs_util.syscs_set_database_property('derby.database.classpath', 
'APP.func9:APP.func10');

4.関数を作成
CREATE FUNCTION fs_list(path varchar(1024))
RETURNS TABLE
(
NAME VARCHAR(1024)
)
LANGUAGE JAVA
PARAMETER STYLE DERBY_JDBC_RESULT_SET
READS SQL DATA
EXTERNAL NAME 'com.serverarekore.derby.FsListFunction.fs_list';

5.実行
select * from table( fs_list('c:\') ) files;

動作環境
Apache Derby 10.7.1.1, JDK6 Update23, h2-1.3.149

0 件のコメント:

コメントを投稿