java - java.sql.DriverManager.getConnection 突然出现 "license checkout failed"

标签 java mysql database matlab

我正在运行和维护一个基于 MySQL 数据库访问的 Matlab 应用程序。突然间,在成功连接数据库 8 年后,我收到“许可错误:-18,147”,表明没有安装和许可任何 Communications Toolbox。虽然这个 TB 从未安装在机器上,但自三周以来,机器上所有三个 Matlab 版本(2012b、2015a、2016b)都抛出了这个错误。

错误发生在编译时(JIT)并且只发生在下面这行

 this.dbCon = java.sql.DriverManager.getConnection(this.dbUrl, this.dbUsr, this.dbPwd);  

注释掉该行,消除了错误,但当然不能解决问题。任何提示或想法,这怎么会突然发生在一段多年未变的代码上,而且显然甚至不是原生的 Matlab?

鲁道夫

最佳答案

这个问题有一个非常分散的解决方案,根本不能称为真正的解决方案,我也不知道它是否可持续。 对我来说,如果遇到许可证问题,MATLAB 似乎首先将单个文件列入黑名单,然后出于某种未知原因将整个目录列入黑名单。

在四处寻找 - 注释行,重命名文件,将代码复制到新文件中等等 - 我突然意识到错误 -18 也立即发生,当我试图将一些无害的新函数保存到应用程序目录中时包含带有“错误”命令的代码。最后证明,即使是一个空的新文件也会产生许可证错误——尽管不是目录中的每个文件:

>> which AppDB
C:\Users\rudolf\Documents\App\AppDB.m  % AppDB constructor
>> which testFunc
C:\Users\rudolf\Documents\App\testFunc.m  % Has no license available
>> which emptyfile
C:\Users\rudolf\Documents\App\emptyfile.m  % Has no license available

在下一步中,我将所有文件移动到不同的目录中,发现 MATLAB 仍然坚持错误 -18。然后我开始先把文件一个个搬回AppDB文件夹,用“which”检查每个的license。令我惊讶的是,emptyfile.m 不再有许可证问题,其他的也没有。该应用程序再次使用完整的 sql-Access 运行,老实说,我觉得有点被 Matlab 许可证管理所欺骗,因为我看不出问题出现和消失的任何原因。

结论:Matlab 似乎使用了一些(错误的)内部保护机制来将涉嫌许可证问题的文件夹列入黑名单。此文件夹中的新文件也将立即列入黑名单。将所有文件移动到另一个文件夹也会将该文件夹列入黑名单(因为它包含列入黑名单的文件)。移回未列入黑名单的文件,将再次将原始文件夹列入白名单。之后,也可以将列入黑名单的文件移回白名单。

关于java - java.sql.DriverManager.getConnection 突然出现 "license checkout failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178453/

相关文章:

java - 如何添加命令权限?

java - 无法使用 Java OpenGL VBO 同时显示 2 个项目

java - 在 REST 服务器的 SecurityContext 中找不到身份验证对象

php - 编写 MySQL 事件来更新表

php - mysqli 获取数组返回 null 作为结果

sql - 如何将 SELECT 语句中的值赋给变量?

java - 如何为@CachePut定义多个键?

mysql - docker compose up后无法连接到mysql db

mysql - 使用多个 JOINS 进行查询

php - 按范围区分文件。文档-类别-部门的关系