SQL AnyLogic 的数据类型

SQL data types for AnyLogic

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

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

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

在 SQL 中添加类型为 bit 的列
ALTER TABLE myTable 
   ADD my_bool BIT NOT NULL DEFAULT 0;

但是,运行模型returns这个错误

SQLServerException: Invalid column name 'false'. Caused by: Invalid column name 'false'

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

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

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

我建议使用 boolean 而不是 bit 作为 boolean 的等价物。好像比较好记

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

检查
select false

这也有效:

select "false"

但是,这 returns 您指定的错误:

select `false`

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

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

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

我不得不将我的 SQL 查询修改为: String insertTableSQL = "INSERT INTO test (my_string) VALUES(" +" '"+my_variable_string+"' )";

注意 my_variable_string 是 Java 枚举的导数,我通过执行 String my_variable_string= my_enum.name();

获得

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

如果您查看 db.script 文件(HSQLDB 只是将持久性数据库数据存储为 SQL 脚本,该脚本创建表并插入值)您可以看到底层 HSQLDB 类型与 SQL 服务器类型密切相关。

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

NB:'Java column types' 应该让非技术用户更容易理解他们从 Java 的角度会得到什么查询该列,但是,例如,它们令人困惑,因为查询将 return Java nulls 用于缺失值,因此 boolean 列实际上有效地 returns a Boolean.

这应该有所帮助。