1
0

More than 1 year has passed since last update.

derbyへのprocedure registration

Last updated at Posted at 2023-02-08

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後に以下を行う。

  1. SQLJ.INSTALL_JARで、jarをサービスに登録 
  2. SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTYでclasspathにサービス登録
  3. 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;
};
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0