gpt4 book ai didi

java - Android 上的 ORMLite 在创建具有枚举类型列和默认值的表时引发异常

转载 作者:行者123 更新时间:2023-12-02 08:09:25 25 4
gpt4 key购买 nike

我的一个业务对象有一个 CommunicationMedium 类型的成员,它是一个枚举。

public enum CommunicationMedium {
EMAIL,
PHONE,
MOBILE,
FACSIMILE,
HOMEPAGE
}

名为 CommunicationData 的业务对象的注释如下。

@DatabaseTable(tableName="store_communication_data")
public class CommunicationData{

public static final String STORE_ID ="store_id";
public static final String TABLE_NAME = "store_communication_data";
public static final String MEDIUM_COLUMN_NAME = "medium";
public static final String VALUE_COLUMN_NAME = "value";

@DatabaseFieldSimple(canBeNull=false, columnName=STORE_ID)
@DatabaseFieldForeign(foreign=true)
private Store store;

@DatabaseFieldSimple(canBeNull=false, columnName=MEDIUM_COLUMN_NAME, defaultValue="CommunicationMedium.EMAIL")
@DatabaseFieldOther(dataType=DataType.ENUM_STRING)
private CommunicationMedium communicationMedium;

@DatabaseFieldSimple(canBeNull=false, columnName=VALUE_COLUMN_NAME)
private String value;
...
}

第一次访问数据库助手时,当应创建 CommunicationData 类的表时,会引发以下异常。 medium 列的默认值似乎有问题。

java.sql.SQLException: SQL statement failed: CREATE TABLE `store_communication_data` (`medium` __ormlite__ no default value string was specified , `store_id` INTEGER NOT NULL , `value` VARCHAR NOT NULL ) 
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
at com.j256.ormlite.table.TableUtils.doStatements(TableUtils.java:458)
at com.j256.ormlite.table.TableUtils.doCreateTable(TableUtils.java:436)
at com.j256.ormlite.table.TableUtils.createTable(TableUtils.java:223)
at com.j256.ormlite.table.TableUtils.createTable(TableUtils.java:53)
...
Caused by: java.sql.SQLException: Problems executing Android statement: CREATE TABLE `store_communication_data` (`medium` __ormlite__ no default value string was specified , `store_id` INTEGER NOT NULL , `value` VARCHAR NOT NULL )
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
at com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:71)
at com.j256.ormlite.table.TableUtils.doStatements(TableUtils.java:452)
...
Caused by: android.database.sqlite.SQLiteException: near "string": syntax error: , while compiling: CREATE TABLE `store_communication_data` (`medium` __ormlite__ no default value string was specified , `store_id` INTEGER NOT NULL , `value` VARCHAR NOT NULL )
at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1026)
...

最佳答案

废话。这是 4.26 版本中的 columnDefinition 功能引入的错误,并在 4.27 中修复。如果您使用@DatabaseFieldOther 注释而不指定columnDefinition,您将触发这个不幸的错误。您现在可以通过添加 columnDefinition 值来解决@Flo:

@DatabaseFieldSimple(canBeNull = false, columnName = MEDIUM_COLUMN_NAME, defaultValue = "EMAIL")
@DatabaseFieldOther(dataType = DataType.ENUM_STRING, columnDefinition = "VARCHAR(100) DEFAULT 'EMAIL' NOT NULL")
private CommunicationMedium communicationMedium;

bug已添加到我们的错误跟踪系统中,我已在 4.27 版本中修复了它。抱歉。

关于java - Android 上的 ORMLite 在创建具有枚举类型列和默认值的表时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com