【发布时间】:2015-07-05 20:38:39
【问题描述】:
我想在我的 sqlite 数据库中插入记录而不为新记录提供 ID。所有的 id 都应该是自动生成的。
所以,id列定义为:
//primary key
@DatabaseField(id = true, columnName = C_ID,generatedId = true)
private int cID;
但是获取dao时抛出异常:
Java.lang.IllegalArgumentException: 必须指定 id 之一, generatedId 和 generateIdSequence 与 cID 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2356) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418) 在 android.app.ActivityThread.access$900(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5293) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 原因:java.lang.IllegalArgumentException:必须用 cID 指定 id、generatedId 和 generatedIdSequence 之一 在 com.j256.ormlite.field.FieldType.(FieldType.java:201) 在 com.j256.ormlite.table.DatabaseTableConfig.convertFieldConfigs(DatabaseTableConfig.java:236) 在 com.j256.ormlite.table.DatabaseTableConfig.extractFieldTypes(DatabaseTableConfig.java:101) 在 com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:153) 在 com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:128) 在 com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:119) 在 com.j256.ormlite.dao.BaseDaoImpl $5.(BaseDaoImpl.java:921) 在 com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:921) 在 com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:72) 在 com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.getDao(OrmLiteSqliteOpenHelper.java:279)
我真的不明白如何解决这个问题?此处抛出异常:
public Dao<Countries, Integer> getCountryDao()
{
if (null == countryDao)
{
try
{
countryDao = getDao(Countries.class); <---Exception
}
catch (java.sql.SQLException e)
{
e.printStackTrace();
}
}
return countryDao;
}
}
这行得通:
//primary key
@DatabaseField(id = true, canBeNull = false, columnName = C_ID)
private int cID;
但我需要在插入新记录时提供 ID。怎么了?
【问题讨论】:
标签: java android auto-increment ormlite