Matlab中使用ADODB访问数据库

作者:, 发表于 , 最后修改于

系列:我贡献的源代码
查看该系列所有文章

Matlab的database工具箱只支持ODBC数据库连接,在使用之前需要先设置ODBC数据源。之前在Excel里用的是ADODB,使用ADODB的好处是无需设置ODBC源,似乎效率也要高一些(但我一直没弄懂ADODB是什么东西,所以效率这东西我也说不清)。

后来在matlab central上查了下,原来Matlab可以通过调用activex的方式使用ADODB。然后我照着别人的例子封装成了一个类。简单的测试发现这种方法比封装的database要快4倍。

adodb.zip 4.4 KiB
Matlab中使用ADODB连接数据库,完整封装,效率比Matlab自带的database稍高。使用方法可help adodb。

使用这个类就很简单了,比如如果手头已有数据库的连接字符串,可以这么调用:

ado = adodb;
res = ado.query('select * from sys', ...
    'Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;');

或者直接提供数据库信息

ado = adodb;
res = ado.query(sql, {database_type, server_name_or_ip, ...
    database_name, user, password});

更详细使用方法可在下载后 help adodb。

Q.E.D.


上一篇:Matlab、Excel、SQL中的日期的数字序列形式2010年10月6日
如果一个日期(或者时间),如果用字符串,比如"2010-10-04"的形式,各个系统都没有什么区别。在某些时候,将日期用数字表示,将大大增加对日期查

下一篇:求助:Matlab如何支持VB制作的COM DLL2010年10月11日
这里放两个在实际工作中遇到的问题,还没找到解决的方法,向广大网友求助。 Matlab如何调用自定义的COM DLL的类? 我之前用visual basic 6.0制作了一


  1. 我下载了Central 上面你的文件,然后从help里面发现这种方法每次执行一次sql查询都需要指定服务器,而且我猜想每次查询都需要重新连接服务器,那么当查询很频繁时效率会下降。

  2. 不需要重新连接数据库的,那个类如果发现数据库跟上次一样就使用已有的数据库连接对象。

    btw,我写的那个类只是封装了简单操作,你可以直接使用adodb activex对象已获得更多功能。

  3. 不太熟悉adodb,但是正在使用您的这个类,因为mysql的OLEDB太老了,不能正常工作。
    我使用了odbc的provider来访问mysql,很奇诡,程序代码中第一次的ado.query是正常工作的,第二次的ado.query就出错了。
    跟踪出错点是在“res = obj.conn.Execute(sql);”

    但是在command窗口中连续使用ado.query却毫无问题?
    完全糊涂了?

  4. command窗口连续使用没问题,但程序内部就出错?这个好奇怪,你查查看是否多次建立了重复的ado对象而数据库不支持单客户端多进程访问。

    另外可查看下obj.conn的具体信息,里面会有具体的出错信息,在调试时输入obj.conn即可。

  5. 错误已经检查出来了。

    原来是没有把query返回的char型变量用cell2mat给转换出来就直接用到下一个sql语句的组合中了。

    adodb的确是比matlab原生的database工具箱快一些,同样使用odbc接口,原生的要200秒,adodb只要160秒就能跑完,但是比起python的100秒还是要慢很多。

  6. 我在使用adodb中也发现了这个现象,当数据的精度超出某个范围(应该是double)时,adodb返回的结果为一个数字字符串。需要对返回的结果进行转换,这样使用起来不是很方便。因为事先无法确定哪个数是以字符串形式返回,哪个数是以数的形式返回。

  7. 您好,最近需要在matlab程序中执行一个存储过程,数据库用的是SQL2000,因为我在执行存储过程之后马上要用到该存储过程的处理结果,我想问一下matlab中执行存储过程是一种阻塞式的么?还是没等存储过程执行完毕马上执行下一条matlab语句?这样的话下一条语句就取不到正确的语句了。
    另外您的这个增强包里关于存储过程函数的例程比较简略,我对其输入参数的格式还不太明了,能提供一个详细一点的调用例程么?不胜感谢!

  8. 抱歉,我还没完成这个包里面的querystoredprocedure。在help里面我没有写如何用这个函数。

    目前使用Matlab访问存储过程,我建议使用Matlab内置的runstoredprocedure函数,这个函数访问Oracle的存储过程有个小问题,我有篇文章提供了修改方式

    虽然我不知道具体的技术细节,我认为Matlab访问数据库时都是阻塞式。我平时用它们从来没在这方面出现过问题。

  9. 你好,我下载了你的adodb.zip,但是没有说明文档,我不知道怎么使用。能不能请你详细说明一下。谢谢。

  • 支持使用微薄、人人网和QQ的账户登陆进行评论。由各自网站直接认证,不会泄露你的密码。
  • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
  • 评论提交后无法修改。如需修改,请删除原评论再重新提交。
  • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。
Loading...
Loading...
Loading...