Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 ormlite创建列顺序错误的表_Java_Android_Sqlite_Ormlite - Fatal编程技术网

Java ormlite创建列顺序错误的表

Java ormlite创建列顺序错误的表,java,android,sqlite,ormlite,Java,Android,Sqlite,Ormlite,Ormlite以两种不同的方式从同一个模型对象创建表 预期: create table statement changed 0 rows: CREATE TABLE `clientspace` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `user_is_following` INTEGER , `space_id` INTEGER , `client_id` INTEGER , `name` VARCHAR , `state` VARCHAR ,

Ormlite以两种不同的方式从同一个模型对象创建表

预期:

create table statement changed 0 rows: CREATE TABLE `clientspace` 
(`id` INTEGER PRIMARY KEY AUTOINCREMENT , `user_is_following` INTEGER , 
`space_id` INTEGER , `client_id` INTEGER , `name` VARCHAR , `state` VARCHAR , 
`latitude` FLOAT , `longitude` FLOAT , `url_twitter` VARCHAR ,.....
错:

executed create table statement changed 1 rows: CREATE TABLE `clientspace` 
(`about_text` VARCHAR , `website` VARCHAR , `app_name` VARCHAR , 
`url_twitter` VARCHAR , `color` VARCHAR , `url_facebook` VARCHAR ,
`tagline` VARCHAR , `state` VARCHAR , `logo` VARCHAR , `skyline` VARCHAR ,
`name` VARCHAR .....
在不知道id字段将是哪个列索引的情况下,我无法通过queryId检索行

为什么会发生这种情况,以及如何使列顺序保持一致

在某些情况下,我会删除表并重新创建它们,而不是删除,这不会影响列顺序

TableUtils.createTable(getConnectionSource(), ClientSpace.class);
我也在使用安卓系统

我的
ormlite_config
文件的结构是预期表格的格式

编辑:找到了这个话题,还没有得出结论

其中一个提示是“永远不要依赖于任何数据库中定义的字段顺序 这不仅仅是一个Android提示,它只是一个很好的数据库实践 常规。“如果我不必使用
queryforId(
并为其提供行结果的精确索引,我肯定不会这样做

例如:

final GenericRawResults<String[]> rawCustomFieldResults =
        customFieldDao.queryRaw(customFieldQuery.prepareStatementString());
    for(final String[] resultArray : rawCustomFieldResults) {
        CustomFieldVO mCustomField =
            customFieldDao.queryForId(Integer.valueOf(resultArray[2]));
final GenericRawResults rawCustomFieldResults=
customFieldDao.queryRaw(customFieldQuery.prepareStatementString());
for(最终字符串[]resultArray:rawCustomFieldResults){
CustomFieldVO mCustomField=
customFieldDao.queryForId(Integer.valueOf(resultArray[2]);
其中,
queryForId(Integer.valueOf(resultArray[2])
要求我只拥有id,并确切知道id将位于哪个索引中

在不知道id字段将是哪个列索引的情况下,我无法通过queryId检索行! 为什么会发生这种情况?如何使列顺序保持一致

ORMLite正在使用反射(或表配置文件)来确定字段顺序。由于某种原因,当反射遍历实体时,它会以您不期望的顺序生成字段列表

“永远不要依赖任何数据库中定义的字段顺序。这不仅仅是安卓提示,一般来说,这只是良好的数据库实践。”

这是一个很好的提示

其中,queryForId(Integer.valueOf(resultaray[2])要求我只拥有id,并确切知道id将位于哪个索引中

当然可以,但由于您正在执行自己的自定义查询,因此可以按特定顺序指定
SELECT
列表,以便知道哪个字段位于
resultArray
的哪个位置。您不应该在那里执行
SELECT*


此外,它还返回列名,您可以使用这些列名验证哪个列名位于哪个位置。

能否在@DatabaseField中添加新参数columnPosition?