如何解决AnyLogic 的 SQL 数据类型
我正在将 AnyLogic 模型的输出保存到 sql 服务器数据库中。对于非 AnyLogic 爱好者,AnyLogic 基于 Java。但是,我不确定需要为数据库中的列指定哪些数据类型。
到目前为止,我正在使用这些:
我还有 Option list
类型的参数,如果我理解正确的话,它是一种 Java 枚举形式。我试图将这些参数保存为 varchar
,但这(显然)不起作用。此外,我的模型包含各种布尔参数。对于我的布尔参数,我通过运行在 sql 中添加 bit
类型的列:
ALTER TABLE myTable
ADD my_bool BIT NOT NULL DEFAULT 0;
但是,运行模型会返回此错误
sqlServerException: 无效的列名 'false'。引起:无效的列名“假”
具体来说,如何导出 Option list
和 boolean
类型的参数?
解决方法
这解决了标记为 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 举报,一经查实,本站将立刻删除。