Oracle包和Java包之间的映射
发布时间:2020-12-12 16:29:58 所属栏目:百科 来源:网络整理
导读:在我的数据库接口库 jOOQ中,我想添加对Oracle(或DB2等)包的支持.我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的Java类.例如,这个存储的函数 CREATE FUNCTION f_author_exists (author_name VARCHAR2) RETURNS NUMBER; 将生成一个可以像这
在我的数据库接口库
jOOQ中,我想添加对Oracle(或DB2等)包的支持.我已经实现了存储过程/函数支持,其中每个存储对象都被建模为生成的Java类.例如,这个存储的函数
CREATE FUNCTION f_author_exists (author_name VARCHAR2) RETURNS NUMBER; 将生成一个可以像这样使用的类(注意,还有很多方便的方法,这个例子只显示了一般设计): // A new "function call instance". The function needs to be instanciated // once per call FAuthorExists f = new FAuthorExists(); // Set the function parameters on the call instance and call it f.setAuthorName("Paulo"); f.execute(connection); // Fetch the result from the function call instance BigDecimal result = f.getReturnValue(); 我选择映射SQL函数的原因 – > Java类是因为存储过程允许复杂的返回值(几个OUT或IN OUT参数),我希望在调用过程后能够逐个获取: p.getOutParam1(); p.getOutParam2(); 现在这个设计适用于存储的函数/过程,无法进行重载.但是,在Oracle(或DB2)的软件包中,我可以使用多个具有相同名称的函数,例如 CREATE PACKAGE my_package IS FUNCTION f_author_exists (name VARCHAR2) RETURNS NUMBER; FUNCTION f_author_exists (name VARCHAR2,country VARCHAR2) RETURNS NUMBER; END my_package; 当我为每个函数(或过程)生成一个类时,我将与几个FAuthorExists Java类命名冲突.一个蹩脚的解决方案是为类名添加索引,例如FAuthorExists2,FAuthorExists3.另一个蹩脚的解决方案是从参数名称/类型直接生成某种哈希值(或值本身)到类名,例如FAuthorExistsVARCHAR2,FAuthorExistsVARCHAR2VARCHAR2.由于显而易见的原因,这两种解决方 有没有人有这个问题的简单解决方案?或者可能是一个更好的整体设计的想法,不会产生这样的功能名称重载问题? 任何反馈意见! 您的getReturnValue函数可以在调用时确定要调用的重载函数,具体取决于已设置的输入参数的数量 – 但我认为如果您坚持使用setParam1而不是setName,它将变得更简单(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |