在没有数据库工具箱的matlab中访问postgres

时间:2013-11-18 20:05:20

标签: matlab postgresql interface

我按照上一个问题的答案中列出的步骤

How can I access a postgresql database from matlab with without matlabs database toolbox?

然而,在步骤

driver = org.postgresql.Driver;

我收到以下错误。

未定义变量“org”或函数“org.postgresql.Driver”

我已将其添加到动态路径中,并且运行“javaclasspath”在底部显示以下内容

    DYNAMIC JAVA PATH

M:\postgresql-9.3-1100.jdbc41.jar

关于什么是错的任何想法?

2 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。当然可以直接使用JDBC,但可以加快查询的执行速度。例如,在Undocumented Matlab网站上有一篇名为“加速Matlab-JDBC SQL查询”的有趣文章。您可以尝试使用本文中的一些代码。但是对于大数据或数据类型比标量(如数组)更复杂的情况,IMHO JDBC并不是最好的方法。其中一个原因是将数据转换为原生Matlab格式(从Java对象到Matlab,反之亦然)的开销。所以最好使用基于libpq的解决方案(官方C应用程序程序员的PostgreSQL接口)。例如,您可以尝试使用C ++编写的开源软件包mexPostgres(请参阅Matlab Central网站)。这个库 基于文本表示(来自libpq的PQgetvalue函数)解析数据,并且只针对非常有限的数据类型列表 (实际上,它们是标量数字和逻辑,时间,日期,时间戳和间隔以及字符串,更复杂的类型,如数组不在范围内)。但是通过文本表示传输是非常慢的,并且可能仅用于非常大的数据集。您也可以使用libpq编写自己的MEX函数。至少有一个名为PgMex的商业解决方案用C语言编写,也基于libpq。该库在Matlab和PostgreSQL之间实现了非常有效的二进制数据传输通道,无需任何文本解析。此外,所有这些都是以Matlab友好和本地方式完成的(以矩阵的形式, 多维数组,结构和任意其他Matlab格式)。您还可以看到以下内容 "Performance comparison of PostgreSQL connectors in Matlab" article以便更好地理解不允许通过JDBC有效连接Matlab的原因。

就PgMex而言 - 这个库提供了一个非常易于使用的连接到Matlab的PostgreSQL;请参阅以下代码(您只需要正确填写下面标有<>符号的所有参数的值):

dbConn = com.allied.pgmex.pgmexec('connect',[...
    'host=<yourhost> dbname=<yourdb> port=<yourport> '...
    'user=<your_postgres_username> password=<your_postgres_password>']);

该库提供了许多允许导入和导出数据的命令 (仅举几例,请参阅execparamExecbatchParamExec 用于执行查询,getf用于解析查询结果,putf用于将数据放入参数集 可以在参数化查询中使用。)

编辑:PgMex可获得免费学术许可。

答案 1 :(得分:1)

你可能得到了错误的postgresql字节码。 jdbc41仅适用于java 1.7和1.8,至少不包括在Matlab 13a中。只有13b的Java 1.7与jdbc41集成。

键入ver以检查当前集成到Matlab中的JRE,然后下载postgresql的正确字节码版本,可能是jdbc4