Java SQLite 64位整数在jooq中识别为整数
我有一个SQLite数据库,用于jOOQ。 当我使用jOOQ的代码生成工具时,它会按照预期构建所有表和记录类。 但是,在生成的代码中,所有SQLiteJava SQLite 64位整数在jooq中识别为整数,java,sqlite,long-integer,jooq,Java,Sqlite,Long Integer,Jooq,我有一个SQLite数据库,用于jOOQ。 当我使用jOOQ的代码生成工具时,它会按照预期构建所有表和记录类。 但是,在生成的代码中,所有SQLiteINTEGER列都会变成java.lang.INTEGER字段 问题是SQLiteINTEGER的最多可以存储64位有符号整数,其中java.lang.INTEGER仅是32位有符号整数 可以告诉jOOQ对这些列使用java.lang.Long(64位有符号)吗?事实上,SQLite中没有实际的整数数据类型,只有一个,它最多可以存储64位有符号整数
INTEGER
列都会变成java.lang.INTEGER
字段
问题是SQLiteINTEGER的
最多可以存储64位有符号整数,其中java.lang.INTEGER
仅是32位有符号整数
可以告诉jOOQ对这些列使用
java.lang.Long
(64位有符号)吗?事实上,SQLite中没有实际的整数
数据类型,只有一个,它最多可以存储64位有符号整数。但是,当您使用DDL时,通常会使用其中一个(主要是)标准“类型名称”,它可以在CREATE TABLE
语句和CAST
表达式中使用:
- INT
- 整数
- 锡
- 斯莫林
- 中微子
- 比基特
- 无符号大整数
- INT2
- INT8
java.lang.Long
,您需要在CREATE TABLE
语句中使用BIGINT
或INT8
中的一个。如果使用INT
或INTEGER
,jOOQ将假定您确实打算存储32位有符号整数,因此java.lang.INTEGER
值
重写数据类型
请注意,jOOQ的代码生成器配置还允许您:
比基特
.\\是否有效
.*
虽然SQLite可以接受这些类型,但它似乎并没有在内部实际使用它们。您完全可以将32位整数放入整数中,而不会出现警告或问题。至少在我的经验中,在所有大小的整数的创建语句中使用INT是常见的。我有很多这样做的遗留数据库,这使得它们在jOOQ中使用起来更加困难。@oillio:是的,我们知道这一点。但是,默认情况下,简单地将所有内容设置为long并不是许多jOOQ用户真正想要的。我们会考虑这一点-同时,您可以使用jOOQ代码生成器。重写生成器的方法正是我想要的,谢谢。和乔奥一起工作很愉快,谢谢你的辛勤工作。@oillio:谢谢你的好话。我还将向答案添加链接这里的主要问题是,为了自动生成主键,必须将PK列创建为整数主键
——这会导致jOOQ发出int
sBIGINT主键
列不会导致SQLite自动生成PKs。如果jOOQ以不同的方式处理整数PK字段,这可能会很有用,因为PK可能是首选的long
(可能会出现2^31个以上的条目…)