用了那么久的matlab,也该对些常识性的知识做下笔记了ヽ( ̄▽ ̄)و
matlab调用MySQL的坑(jdbc)
调用示例
dbname = ''; %后面url已经写了
username = 'root';
password = '123456';
driver = 'com.mysql.jdbc.Driver';
dburl = ['jdbc:mysql://localhost:3306/sound_recognize?serverTimezone=UTC'];
% javaclasspath('D:\MATLAB\drivers\mysql-connector-java-8.0.16.jar');
conn = database(dbname, username, password, driver, dburl);
res = exec(conn, 'select * from db_test.table_test');
res = fetch(res);
res = res.Data
最后不加serverTimezone会报错"The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone… …",这是因为MySQL时区对不上;但是加上前面dbname记得改为空,因为你url里已经有了;
或者你不想加serverTimezone,你还可以修改MySQL:
mysql -hlocalhost -uroot -p
show variables like '%time_zone%'
set global time_zone='+8:00';
PS:此处使用matlab2017b,mysql-connector-java-8.0.16.jar,亲测可用
PPS:matlab内部很多也是java实现的(包括数据库部分).so~,jdbc方式可能比odbc效率更高
之前遇到个问题:读取sql server中的数据,其中有一个字段长度是24w左右,matlab一直"正忙",只能强关.后来定义一个30w的数组,然后select另一个没那么长数据的表,成功,再回来select可以成功;否则,你就一直等它"正忙"吧(怀疑这是包在内存处理上的bug)
软件类型
1MATALB属于半开源软件,其中很多函数可以通过“open/edit/type+filename”命令进行编辑和查看源代码;但如min,fft,sum等函数,因为这些函数属于MATLAB的built-in-function(内置函数)是不公开的.有人说这些函数的算法是最优化的,保证较低的时间复杂度提高效率,所以,我感觉写一个算法优先考虑调用MATLAB自带函数,自带函数解决不了的情况下,再自己去写.
要确定函数是否开源可以通过which命令.
关于内置函数
1built-in 函数并非是用我们熟知的matlab语言写的,所以,即使给你了,你也未必能看懂。matlab 最初是在两个高效的底层矩阵计算包 LINPACK 和 EISPACK 上发展出来的,这两个包的升级版本叫做 LAPACK 。能写出这些包并且对其维护的人都是全球顶尖编程高手,他们不仅要求编程牛逼,还要精通线性代数和矩阵运算。所以,一般人根本不可能接触到matlab这些底层的东西。曾经有很多matlab爱好者向mathworks 询问并索要过built-in函数源代码,都被拒绝了,他们收到的回复是:
You can read and edit the source code for M-file functions that ship with
MATLAB; the only way to read and edit the built-in functions like FFT is to
get a job with The MathWorks. We don’t distribute the built-in source code
for MATLAB.
–
Steve Lord
slord@mathworks.com