如何为Apache Derby设置类路径属性?解决存储过程创建报错
解决Apache Derby存储过程类找不到的问题
先修正存储过程的外部名称格式
你当前的EXTERNAL NAME用了本地文件路径,这是错误的。Derby要求的是Java类的全限定类名+方法名,格式为'包名.类名.方法名',而非物理文件路径。
举个实际例子:
- 如果
MyFirstDatabaseConnection类没有包声明(处于默认包),正确写法是:
CREATE PROCEDURE read_e_names () PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME 'MyFirstDatabaseConnection.testProc';
- 如果类有包名(比如
com.myapp),则写成'com.myapp.MyFirstDatabaseConnection.testProc'。
设置Derby的类路径属性(derby.database.classpath)
Derby需要找到你编译好的.class文件(不是.java源码文件),先确保Java类已完成编译,再按以下方式配置类路径:
方式1:在JDBC连接URL中指定
连接数据库时,将class文件所在的根目录添加到URL参数中。比如你的class文件在Maven项目默认编译输出目录C:\Users\Koi\IdeaProjects\Java Finishing Touches\JDBC\target\classes,连接URL可写为:
jdbc:derby:你的数据库名;create=true;derby.database.classpath=C:\Users\Koi\IdeaProjects\Java Finishing Touches\JDBC\target\classes
若路径包含空格,可将空格替换为URL编码%20,或用引号包裹路径。
方式2:通过系统属性配置
- 命令行启动Derby服务器时:
java -Dderby.database.classpath=C:\Users\Koi\IdeaProjects\Java Finishing Touches\JDBC\target\classes -jar derbyrun.jar server start
- IDE中运行程序时,在VM参数里添加:
-Dderby.database.classpath=C:\Users\Koi\IdeaProjects\Java Finishing Touches\JDBC\target\classes
必做的额外检查
MyFirstDatabaseConnection类必须是public修饰的,testProc方法必须是public static的(Derby存储过程要求方法为静态),且方法签名要和存储过程的参数、返回逻辑完全匹配。- 不要指向源码目录
src/main/java,Derby仅能识别编译后的.class文件,Maven/Gradle项目的class文件一般在target/classes或build/classes目录下。
内容的提问来源于stack exchange,提问作者Ken Kiarie
相关产品推荐
相关产品推荐

