gpt4 book ai didi

Matlab 编译器和数据库应用程序

转载 作者:行者123 更新时间:2023-11-29 13:48:30 25 4
gpt4 key购买 nike

我有一个 Matlab 函数,可以从 postgres 数据库中检索数据,对其进行操作并将结果写回。当我在 Matlab 中运行代码时,它像阳光一样工作,但是当我使用编译器部署代码并运行它时,它返回错误:

Error using datastore No value was given for 'SELECT exp_id, exp_name FROM experiments WHERE exp_post_process = '1''. Name-value pair arguments require a name followed by a value.

Error in datastore>parseFileBasedNVPairs (line 244)

Error in datastore (line 102)

Error in Tracker_dbase_conn1 (line 47)

MATLAB:InputParser:ParamMissingValue

这是我在 Matlab 中编写的代码,如前所述,如果我运行它就可以正常工作:

%% Local specifications
%establish database connection%
conn=database('wofog','DBA','','Vendor','PostgreSQL','Server','localhost:5432');
%Selects the name and ID of the experiment that has to be post-processed
%The experiment has been flagged in exp_post_process

sqlqueryExp = ('SELECT exp_id, exp_name FROM experiments WHERE exp_post_process = ''1''');

dbExp = datastore(conn,sqlqueryExp);

exp =read(dbExp);

expID=exp.exp_id;

expName = exp.exp_name;

我在装有 osx 10.12.5 和 Matlab R2017a 的 mac 上工作

如有任何帮助,我将不胜感激。

最佳答案

我猜这个问题与编译的应用程序中不存在的数据库驱动程序有关。

解释似乎正在发生的事情:

  • 错误消息表明 datastore将其第二个参数解释为名称-值对参数的第一个(名称)元素,并且没有第二个(值)元素与之配合。
  • datastore 有两个版本命令 - 一个来自基础 MATLAB 的创建 FileDatastore 的命令,以及来自数据库工具箱的一个,它创建了一个 DatabaseDatastore .
  • 数据库工具箱中的命令采用 datastore(conn, sqlquery) 的形式, 并在 datastore 的第一个输入参数时被调用是一个有效的数据库连接。
  • 来自基本 MATLAB 的命令采用 datastore(location, Name, Value, ...) 的形式, 并以其他方式调用。
  • 因此,由于您的错误消息表明第二个参数被误解为名称-值对的第一个元素,这意味着必须调用来自基础 MATLAB 的命令。
  • 因此,第一个输入参数不能是有效的数据库连接。

那为什么不是 conn有效的数据库连接?我不知道。您可以通过在 conn=database(... 之后输入几个调试命令来帮助诊断问题那会显示 conn以及它的一些属性。我很确定您会发现它不是有效的数据库连接对象,然后任务就是找出原因。

我可能是错的,但我猜最终的问题是 Postgres 数据库驱动程序在您使用 MATLAB 时可用,但在您使用已编译的应用程序时不可用。

数据库驱动程序通常是 .jar文件,并且对于 .jar 来说不寻常文件,它们通常需要放在 MATLAB 的静态 java 路径(而不是动态 java 路径)上才能正常工作。 Postgres 驱动程序可能位于 MATLAB 静态路径上,但在您运行已编译的应用程序时并未放在 MATLAB 运行时 (MCR) 的静态路径上。

如果事实证明这是根本原因,您可以在<mcrinstalllocation>\toolbox\local\classpath.txt中修改MCR的静态路径。 ,直接添加Postgres驱动的路径。

希望对您有所帮助!

关于Matlab 编译器和数据库应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com