微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AnyLogic 的 SQL 数据类型

如何解决AnyLogic 的 SQL 数据类型

我正在将 AnyLogic 模型的输出保存到 sql 服务器数据库中。对于非 AnyLogic 爱好者,AnyLogic 基于 Java。但是,我不确定需要为数据库中的列指定哪些数据类型。

到目前为止,我正在使用这些:

  • 在 AnyLogic 中加倍:在 sql 中浮动
  • AnyLogic 中的字符串:sql 中的 varchar
  • AnyLogic 中的 int :sql 中的 int

我还有 Option list 类型的参数,如果我理解正确的话,它是一种 Java 枚举形式。我试图将这些参数保存为 varchar,但这(显然)不起作用。此外,我的模型包含各种布尔参数。对于我的布尔参数,我通过运行在 sql添加 bit 类型的列:

ALTER TABLE myTable 
   ADD my_bool BIT NOT NULL DEFAULT 0;

但是,运行模型会返回此错误

sqlServerException: 无效的列名 'false'。引起:无效的列名“假”

具体来说,如何导出 Option listboolean 类型的参数?

解决方法

这解决了标记为 MySQL 的原始问题。

我不知道有关“选项列表”的所有问题。似乎一个字符串(长度如 varchar(255))会起作用。您还可以查看内置的 enum 类型,尽管我通常不建议使用 enum

我建议使用 boolean 而不是 bit 作为 boolean 的等效项。似乎更容易记忆。

也就是说,MySQL 将 false 理解为常量。您可以通过运行来检查:

select false

这也有效:

select "false"

但是,这会返回您指定的错误:

select `false`

我怀疑正在生成的代码正在使用此构造。您将需要查看代码——并且您可能需要找出处理此问题的其他方法。在 MySQL 中,您可以将 0 用于 false,这可能会解决您的问题。

,

AnyLogic 数据库是标准的 HSQLDB 数据库(不是专有的),但他们添加了 AnyLogic 客户端功能来定义“列类型”,就好像它们是 Java 类型一样(具有用于选项列表和编译的特殊类型)即飞即运行的 Java 代码)。

如果您查看 db.script 文件(HSQLDB 仅将持久性 DB 数据存储为 SQL 脚本,该脚本创建表并插入值),您可以看到与 SQL Server 类型密切映射的底层 HSQLDB 类型。

boolean --> BOOLEAN
double --> DOUBLE
int --> INT
String --> VARCHAR(16777216)
Date --> TIMESTAMP
Code --> VARCHAR(16777216)
Option List --> VARCHAR(255)

注意:“Java 列类型”应该让非技术用户在查询该列时更容易从 Java 的角度理解他们会得到什么,但是,例如,他们令人困惑的是,对于缺失值,查询将返回 Java nulls,因此 boolean 列实际上有效地返回了 Boolean

那应该会有所帮助。

,

我设法解决了我的部分问题。我现在可以将 Java 中的字符串变量存储到我的 SQL 数据库中。问题是由于引用的使用不当造成的。

Java 对字符串变量使用双引号(例如:DateTime)。 SQL 需要单引号(例如:"")用于类似字符串的列,例如 ''varchar()

我不得不将我的 SQL 查询修改为: char()

请注意,String insertTableSQL = "INSERT INTO test (my_string) VALUES(" +" '"+my_variable_string+"' )"; 是 Java 枚举的衍生物,我通过执行 my_variable_string

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。