连接到postgresql数据库时出现matlab错误
我正在尝试使用以下命令连接到PostgreSQL数据库:连接到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()。。
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和什么操作系统?我可以调出来源,看看它。