软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> 如何实现在Oracle中应用存储过程调用MatLab函数(1) -> 正文阅读

[数据库]如何实现在Oracle中应用存储过程调用MatLab函数(1)


设计思路:首先在eclipse中使用java调用Matlab函数,再在Oracle存储过程中将java类映射其中。(本文最终还是选择了matlab2012b ,eclipse3.5,jdk1.6. 45,oracle12c(向下兼容jdk1.6,低版本不行))提供下载地址:http://pan.baidu.com/s/1dEj86op
(1)首先讲解如何利用eclipse调用matlab函数,以及个人遇到的一些问题和问题的解决思路。
准备工作:安装jdk,jdk的位数要与matlab的jdk的位数(32bit 和64bit 有区别的)相同,否则会出现兼容问题。jdk是高版本兼容低版本的。
假设你已经安装了jdk 和 eclipse 和 matlab了。
首先,要确定你电脑上装好了MATLAB并且配置好了Java的运行环境,注意,MATLAB的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder)。
本人使用的 matlab2012b 版本 eclipse为 :win32.x86_64_1.1.200.v20150204-1316.
第一步:打开打开MATLAB(笔者用的是MATLAB 2012b,版本的一些差异我会在后面注明),在Command Window框中输入deploytool,会跳出如下界面:
[img]http://img.blog.csdn.net/20160321152723622
在Name中输入名字,在Location中选择路径,最后在Type中选择Java Package:
[img]http://img.blog.csdn.net/20160321152815497
可能在有些版本中选择Type时显示的是Matlab Builder for Java,并且在Deployment Tool面板中还有Generate Verbose Output选项框,勾选上它,针对不同的版本时可能有一些出入,大家多留心一些,自己多尝试尝试。
举一个加法函数的例子:在matlab中写一个函数:
function sum = add(x,y)
sum=x+y;
end
保存成 add.m
然后在MATLAB中找到Java Package窗口,添加class文件,命名这个class文件的时候要注意了,因为这个文件就是以后导入到Java中要作为一个对象的名字,也就是说它就是放在new后面作为构造函数的类名。这里命名为matlabAdd:[img]http://img.blog.csdn.net/20160321153211283
然后添加类和方法:
[img]http://img.blog.csdn.net/20160321153248659
注意,此处仍然是matlabAdd.prj 下 add files 文件,此处截图有误,读者了解即可。
[img]http://img.blog.csdn.net/20160321153350593
进行打包,打成jar包:
[img]http://img.blog.csdn.net/20160321153401000
调用打包好的matlab函数
在MATLAB安装的目录中找到”…\toolbox\javabuilder\jar\javabuilder.jar”的文件,并在你刚才打包的文件夹中找到对应的包,本例中是matlabAdd.jar,然后将这两个jar包导入到你的Java项目当中。[img]http://img.blog.csdn.net/20160321153455781
其实真正使用64位时候,要在 win64中拷取javabuilder.jar文件,如图:
[img]http://img.blog.csdn.net/20160322171441767
[img]http://img.blog.csdn.net/20160321153509766
其实,实在matlabAdd 项目的 src中拷取的 jar包:如图:
[img]http://img.blog.csdn.net/20160322171629363
找到这些jar包以后,在eclipse里新建一个java项目,记住,jdk版本要匹配,比如mattlab中的jdk为64bit的那么eclipse使用的也必须为64bit的,否则会出现加绒问题。
[img]http://img.blog.csdn.net/20160321153651860
将jar包导入到项目以后,就可以进行编码,对matlab的加法函数jar包进行调用了:
[img]http://img.blog.csdn.net/20160321153753853
代码如下:
package matLab;
import com.mathworks.toolbox.javabuilder.*;
import matlabAdd.*;
class matAdd
{
public static void main(String[] args)
{
MWNumericArray a = null;
MWNumericArray b = null;
Object[] result = null;
matlabAdd myAdd = null;
try
{
         if (args.length != 2)
         {
             System.out.println("Error: must input 2 numbers!");
             return;
         }

         a = new MWNumericArray(Double.valueOf(args[0]),MWClassID.DOUBLE);
         b = new MWNumericArray(Double.valueOf(args[1]),MWClassID.DOUBLE);

         myAdd = new matlabAdd();

         result = myAdd.add(1, a, b);
         System.out.print("\nThe sum of " + a.toString() + " and " + b.toString() + " is: ");
         System.out.println(result[0]);
     }
     catch (Exception e)
     {
         System.out.println("Exception: " + e.toString());
     }

     finally
     {

         MWArray.disposeArray(a);
         MWArray.disposeArray(b);
         MWArray.disposeArray(result);
         if (myAdd != null)
             myAdd.dispose();
     }
 }

}
当输入 1 3 时候,中间用空格隔开,结果:
运行结果为:
The sum of 1 and 3 is: 4
本次配置主要出现的额问题就是 jdk兼容问题,其他问题没出现。
Exception in thread “main” java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt7_17.dll, required by MATLAB Builder JA, on java.library.path.
This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 7.17.
at com.mathworks.toolbox.javabuilder.internal.MCRConfigurationProxyLibraryDir.get(MCRConfiguration.java:167)atcom.mathworks.toolbox.javabuilder.internal.MCRConfigurationProxyLibraryDir.(MCRConfiguration.java:173)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getProxyLibraryDir(MCRConfiguration.java:178)
at com.mathworks.toolbox.javabuilder.internal.MCRConfigurationMCRRoot.get(MCRConfiguration.java:77)atcom.mathworks.toolbox.javabuilder.internal.MCRConfigurationMCRRoot.(MCRConfiguration.java:87)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getMCRRoot(MCRConfiguration.java:92)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ModuleDir.(MCRConfiguration.java:66)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(MCRConfiguration.java:71)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.(MWMCR.java:1462)
at mysum.MysumMCRFactory.newInstance(MysumMCRFactory.java:48)
at mysum.MysumMCRFactory.newInstance(MysumMCRFactory.java:59)
at mysum.mysum.(mysum.java:62)
at sumceshi.main(sumceshi.java:9)
是因为你的matlab所运行的java虚拟机和你程序的java虚拟机,一个是64位,一个是32位,或者版本不同导致的。matlab输入version -java看一下java版本,然后如果是64位的就去下一个安装。我是用eclipse给你提供个eclipse 的修改方法,去你eclipse点window=>preferences=>installed JREs=>add,将新安装的加进去,然后去你的项目右键=>properties=>java build path=>libraries把之前的jre删了,然后点add librariy=>JRE system library=>alternate JRE,选你刚装的jre,finishing,ok,
......显示全文...
    点击查看全文


上一篇文章           查看所有文章
2016-03-26 16:27:14  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年11日历
2018-11-14 19:16:08
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --