SQL AnyLogic 的数据类型
SQL data types for AnyLogic
我正在将 AnyLogic 模型的输出保存到 SQL 服务器数据库中。对于非 AnyLogic 爱好者,AnyLogic 基于 Java。但是,我不确定我需要为数据库中的列指定哪些数据类型。
到目前为止,我正在使用这些:
- AnyLogic 中的双精度:SQL
中的浮点数
- AnyLogic 中的字符串:SQL
中的 varchar
- AnyLogic 中的整数:SQL
中的整数
我还有 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 list
和 boolean
类型的参数?
这解决了被标记为 MySQL 的原始问题。
我不知道关于“选项列表”的所有问题。似乎一个字符串(长度如 varchar(255)
)可以工作。您还可以查看内置的 enum
类型,尽管我通常不建议使用 enum
s.
我建议使用 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
.
这应该有所帮助。
我正在将 AnyLogic 模型的输出保存到 SQL 服务器数据库中。对于非 AnyLogic 爱好者,AnyLogic 基于 Java。但是,我不确定我需要为数据库中的列指定哪些数据类型。
到目前为止,我正在使用这些:
- AnyLogic 中的双精度:SQL 中的浮点数
- AnyLogic 中的字符串:SQL 中的 varchar
- AnyLogic 中的整数:SQL 中的整数
我还有 Option list
类型的参数,如果我理解正确的话,它是 Java 枚举的一种形式。我试图将这些参数保存为 varchar
,但这(显然)不起作用。此外,我的模型包含各种布尔参数。对于我的布尔参数,我通过 运行:
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 list
和 boolean
类型的参数?
这解决了被标记为 MySQL 的原始问题。
我不知道关于“选项列表”的所有问题。似乎一个字符串(长度如 varchar(255)
)可以工作。您还可以查看内置的 enum
类型,尽管我通常不建议使用 enum
s.
我建议使用 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
.
这应该有所帮助。