Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到postgresql数据库时出现matlab错误_Postgresql_Matlab - Fatal编程技术网

连接到postgresql数据库时出现matlab错误

连接到postgresql数据库时出现matlab错误,postgresql,matlab,Postgresql,Matlab,我正在尝试使用以下命令连接到PostgreSQL数据库: connection=数据库(。。。 options.getDatabaseName()。。。 options.getUsername()。。。 options.getPassword()。。。 “org.postgresql.Driver”。。。 “jdbc:postgresql://“+options.getHostname()+”:“+options.getPort()+”/“+options.getDatabaseName()。。

我正在尝试使用以下命令连接到PostgreSQL数据库:

connection=数据库(。。。
options.getDatabaseName()。。。
options.getUsername()。。。
options.getPassword()。。。
“org.postgresql.Driver”。。。
“jdbc:postgresql://“+options.getHostname()+”:“+options.getPort()+”/“+options.getDatabaseName()。。。
);
它返回以下错误:

Error using database (line 59)
Unmatched parameter name 'org.postgresql.Driver' must be a string scalar or character vector that can represent a field name.
我看到了其他关于这个的问题,比如,但是错误信息是不同的


我做错了什么?

我自己找到了解决方案,这很棘手(我认为可能与一个bug有关)

为了测试数据库连接,我首先创建了一个与数据库资源管理器的连接。它成功了,我用数据库的相同名称保存了这个连接

当我使用
database
命令时,通过检查它的源代码,我看到它做的第一件事是检查是否存在具有该名称的现有数据源,如果没有,则搜索数据库。问题是,由于我的连接具有相同的数据库名称,
database
假设我希望使用数据源命令版本而不是数据库。它试图使用以下命令:

conn = database(datasource,username,password)
而不是这个:

conn = database(databasename,username,password,driver,url)
因为
wtrade
既是数据库的名称,也是数据源的名称。在这种情况下,根据Matlab文档,第四个参数,
driver
,必须是一个参数名,如
“PortNumber”
“Vendor”
,因此,由于驱动程序字符串与参数名不匹配,因此出现了错误

我已经删除了与数据库同名的数据源,一切都开始工作了


我已经通知了MathWorks,因为在我看来,如果一个数据库与一个数据源具有相同的名称,那么应该没有问题,因为签名是不同的,所以
database
命令也应该处理这种情况。

我自己找到了解决方案,而且很棘手(我认为可能与一个bug有关)

为了测试数据库连接,我首先创建了一个与数据库资源管理器的连接。它成功了,我用数据库的相同名称保存了这个连接

当我使用
database
命令时,通过检查它的源代码,我看到它做的第一件事是检查是否存在具有该名称的现有数据源,如果没有,则搜索数据库。问题是,由于我的连接具有相同的数据库名称,
database
假设我希望使用数据源命令版本而不是数据库。它试图使用以下命令:

conn = database(datasource,username,password)
而不是这个:

conn = database(databasename,username,password,driver,url)
因为
wtrade
既是数据库的名称,也是数据源的名称。在这种情况下,根据Matlab文档,第四个参数,
driver
,必须是一个参数名,如
“PortNumber”
“Vendor”
,因此,由于驱动程序字符串与参数名不匹配,因此出现了错误

我已经删除了与数据库同名的数据源,一切都开始工作了


我已经通知MathWorks了,因为在我看来,如果数据库与数据源的名称相同,那么应该没有问题,因为签名不同,所以
database
命令也应该处理这种情况。

看起来您做得不错。
database()
签名有点不可靠。如果在参数中使用
char
数组(单引号)而不是
string
数组(双引号),会发生什么情况?还要确保前三个
optiosn.getDatabaseName()
等参数没有返回空值;这可能会破坏
数据库()
的签名解析启发法。顺便问一下,您运行的是什么版本的Matlab和什么操作系统?我可以调出来源看看。看起来你做得不错。
database()
签名有点不可靠。如果在参数中使用
char
数组(单引号)而不是
string
数组(双引号),会发生什么情况?还要确保前三个
optiosn.getDatabaseName()
等参数没有返回空值;这可能会破坏
数据库()
的签名解析启发法。顺便问一下,您运行的是什么版本的Matlab和什么操作系统?我可以调出来源,看看它。