Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite 64位整数在jooq中识别为整数_Java_Sqlite_Long Integer_Jooq - Fatal编程技术网

Java SQLite 64位整数在jooq中识别为整数

Java 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位有符号整数

我有一个SQLite数据库,用于jOOQ。 当我使用jOOQ的代码生成工具时,它会按照预期构建所有表和记录类。 但是,在生成的代码中,所有SQLite
INTEGER
列都会变成
java.lang.INTEGER
字段

问题是SQLite
INTEGER的
最多可以存储64位有符号整数,其中
java.lang.INTEGER
仅是32位有符号整数


可以告诉jOOQ对这些列使用
java.lang.Long
(64位有符号)吗?

事实上,SQLite中没有实际的
整数
数据类型,只有一个,它最多可以存储64位有符号整数。但是,当您使用DDL时,通常会使用其中一个(主要是)标准“类型名称”,它可以在
CREATE TABLE
语句和
CAST
表达式中使用:

  • INT
  • 整数
  • 斯莫林
  • 中微子
  • 比基特
  • 无符号大整数
  • INT2
  • INT8
为了让jOOQ生成
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
s
BIGINT主键
列不会导致SQLite自动生成PKs。如果jOOQ以不同的方式处理整数PK字段,这可能会很有用,因为PK可能是首选的
long
(可能会出现2^31个以上的条目…)