新近接手到一个任务:用matlab调用数据库。参考了网上一些高手的博客和经验帖,采用matlab连接SQL Server2008,可能是版本问题或者是系统兼容性(我还停留在本世纪初的XP,汗~),老是连接不上,考虑到matlab是采用java编辑的,MySQL和的兼容性可能相对于微软的霸道会好一点,遂采用matlab连接MySQL,结果成果。闲话少叙,直接上料。
由于这里涉及到matlab和MySQL两家子的事,网上的好多资料都是单说一头,顾此失彼,迷惑大众,个人感觉还是一点点从头道来。
Matlab的安装就不多说了,我安装的是matlab7.1。
【第一步】首先是安装MySQLserver(版本是5.6.24)。
在网上下载MySQL server安装包,我下的是http://rj.baidu.com/soft/detail/12585.html?ald这是百度给的下载地址,应该值得信赖吧~
下的是一个zip文件,没有setup.exe,原来MySQL有两个安装版本,这边下的是稍微复杂一点的,需要手动安装,有点吓人,不过仔细按步骤走还是不难的。具体安装过程参考百度经验http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html
安装完后,对于有将近四年没有碰过数据库的我是无奈的,不知道咋整了,所以我加了下面非常必要的第二步。
【第二步】然后是检验MySQL,并简单操作一下,以备后验。
第一步中安装时默认root用户密码为空,下面都默认为空,暂不在此添麻烦了。
拿到一个数据库之后第一件事情往往就是建立数据库,建表,再然后实现数据增删改查。鉴于时间长久对sql语言遗忘太多,按主要步骤逐一示例。
A)建立一个数据库
create databasetest; 注意是database而不是datebase,否则报错:
一开始我还查ERROR 1064(42000)是个嘛,哪里有结果哦。。。
B) 建立一张表
在test数据库下建立表
use test
create table student(idint, name varchar(20), age int);
C) 插入数据
insert intostudent values(10,’wang’,20);
再多插入几条数据,形式一样的啦。
D)查询
select * fromstudent;
【第三步】再然后是配置matlab与MySQL连接的JDBC。
A) 安装MySQL驱动程度包(先下载好mysql-connector-java-5.1.7-bin.jar http://download.csdn.net/detail/u011381488/5758623这是CSDN上的,好用,0资源分,真好~)
详细步骤如下:
Step 1: 将mysql-connector-java-5.1.7-bin.jar文件拷贝到......\MATLAB\R2009a\java\jar\toolbox
Step 2: 到......\MATLAB\R2009a\toolbox\local目录下,找到classpath.txt文件,打开,并添加用来加载mysql的jdbc驱动语句:
$matlabroot/java/jar/toolbox/mysql-connector-java-5.1.7-bin.jar (注意是“/”而不是“\”)
Step 3:重新打开MATLAB即可
B) 在matlab上采用程序连接MySQL
Matlab连接MySQL的函数为:
conn=database('databasename','username','password','driver','databaseurl')
连接成功后,返回连接对象。
参数如下:
*databasename: 数据库名称.
*driver: JDBC driver.
*username and password: 用户名和密码.
*databaseurl: 类似于jdbc:subprotocol:subname. subprotocol 是数据库类型,
具体代码为:
conn =database('test','root','','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3306/test')
{注意:root的密码为空,且需要用localhost,换做127.0.0.1就会连接失败!!!切记}
返回信息为:
conn =
Instance: 'test'
UserName: 'root'
Driver: 'com.mysql.jdbc.Driver'
URL:'jdbc:mysql://localhost:3306/test'
Constructor: [1x1com.mathworks.toolbox.database.databaseConnect]
Message: []
Handle: [1x1com.mysql.jdbc.ConnectionImpl]
TimeOut: 0
AutoCommit: 'on'
Type: 'Database Object'
ping一下可得:
ping(conn)
ans =
DatabaseProductName: 'MySQL'
DatabaseProductVersion: '5.6.24'
JDBCDriverName: 'MySQL-AB JDBCDriver'
JDBCDriverVersion:'mysql-connector-java-5.1.7 ( Revision:${svn.Revision} )'
MaxDatabaseConnections: 0
CurrentUserName: 'root@localhost'
DatabaseURL:'jdbc:mysql://localhost:3306/test'
AutoCommitTransactions: 'True'
【第四部】最后是在matlab上连接MySQL,并进行校验。
执行命令,下面依葫芦画瓢就行了。
cursorA = exec(conn,'select * fromstudent')
cur = fetch(cursorA)
cur.Data
cursorA = exec(conn,'insert into studentvalues(12,"li",30)') {注意,插入数据中的名字li需要加双引号,是matlab的规则,而MySQL中只需要单引号!’}
cur = fetch(cursorA)
正文至此完毕。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
写在后面:
在调试过程中,我在matlab连接SQLServer2008上遇到了不小的困难,按照http://blog.sina.com.cn/s/blog_a4780bcc01011cxq.html做也没连成,报错如下:
databaseurl='jdbc:sqlserver://localhost:1433;databaseName=test';
driver='com.microsoft.sqlserver.jdbc.SQLServerDriver';
username='sa';
password='123';
databasename='test';
con1=database(databasename,username, password, driver, databaseurl);
??? Javaexception occurred:
java.lang.UnsupportedClassVersionError:Bad version number in .class file
atjava.lang.ClassLoader.defineClass1(Native Method)
atjava.lang.ClassLoader.defineClass(Unknown Source)
atjava.security.SecureClassLoader.defineClass(Unknown Source)
atjava.net.URLClassLoader.defineClass(Unknown Source)
atjava.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(UnknownSource)
atjava.security.AccessController.doPrivileged(Native Method)
atjava.net.URLClassLoader.findClass(Unknown Source)
atjava.lang.ClassLoader.loadClass(Unknown Source)
atsun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
atjava.lang.ClassLoader.loadClass(Unknown Source)
atjava.lang.ClassLoader.loadClass(Unknown Source)
atcom.mathworks.jmi.ClassLoaderManager.loadClass(ClassLoaderManager.java:254)
atcom.mathworks.jmi.ClassLoaderManager.findClass(ClassLoaderManager.java:241)
atcom.mathworks.jmi.Matlab$1.findClass(Matlab.java:366)
atcom.mathworks.util.ClassLoaderBridge.findClass(ClassLoaderBridge.java:24)
atcom.mathworks.toolbox.database.databaseConnect.makeDatabaseConnection(databaseConnect.java:131)
.
Error in ==>database.database at 114
connectionVector= makeDatabaseConnection(conn);
现在也没搞明白咋回事,是不是“UnsupportedClassVersionError: Bad version number in .class file”的版本问题呢?欢迎交流哈!