procedureを用意する。netbeansでsave and buildし、class fileを作成する
public class ProcedureExample {
public static void method(String pname) {
try {
Connection con = DriverManager.getConnection("jdbc:default:connection");
String sql = "update firsttable set name = ? where id = 10";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,pname);
ps.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
create jar from class file。
root dir(*注意)でjarを作ること。
jar cvf test.jar com/mycompany/mavenproject1/*.class
マニフェストが追加されました
com/mycompany/mavenproject1/Outer.classを追加中です(入=2625)(出=1377)(47%収縮されました)
com/mycompany/mavenproject1/ProcedureExample.classを追加中です(入=1178)(出=669)(43%収縮されました)
derbyでij起動&db connect後に以下を行う。
- SQLJ.INSTALL_JARで、jarをサービスに登録
- SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTYでclasspathにサービス登録
- CREATE PROCEDUREでprocedure登録
java -jar %DERBY_HOME%/lib/derbyrun.jar ij
ijバージョン10.15
ij> CONNECT 'jdbc:derby://localhost:1527/data/Sample;create=true';
ij> call SQLJ.INSTALL_JAR('C:\Users\***\Downloads\db-derby-10.15.2.0-bin\db-derby-10.15.2.0-bin\test.jar','App.test',0);
文が実行されました。
ij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','App.test');
ij> CREATE PROCEDURE UPDATE_ITEM(IN NAME VARCHAR(20)) LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA EXTERNAL NAME 'com.mycompany.mavenproject1.ProcedureExample.method';
0行が挿入/更新/削除されました
SQLJ.INSTALL_JARで以下のエラーが発生した場合、
java.policyのgrantにAllPermissionを追加したらエラー解消。これでいいのかは?
ERROR 38000: 式の評価中に例外'java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\***\Downloads\db-derby-10.15.2.0-bin\db-derby-10.15.2.0-bin\test.jar" "read")'がスローされました。
ERROR XJ001: Java例外: 'access denied ("java.io.FilePermission" "C:\Users\***\Downloads\db-derby-10.15.2.0-bin\db-derby-10.15.2.0-bin\test.jar" "read"): java.security.AccessControlException'。
grant{
permission java.security.AllPermission;
};