如何在ORMLite中重命名列?

时间:2014-01-13 16:33:04

标签: android sql ormlite

如何在ORMLite中重命名列名?

我正在尝试编写该查询SELECT id as _id from some_table

Android游标适配器要求我们使用名为_id的列,ORMLite要求我们将列命名为id

我正在尝试编写该查询并从此查询返回Cursor

Dao<NewsArticle, Long> newsArticleDao =
       ((SomeApp)mContext.getApplicationContext()).getDAOConnection().getDAO(
            NewsArticle.class);

QueryBuilder<NewsArticle, Long> query = newsArticleDao.queryBuilder().selectRaw(
      "`id` as `_id`");
PreparedQuery<NewsArticle> preparedQuery = query.prepare();

CloseableIterator<NewsArticle> iterator = newsArticleDao.iterator(preparedQuery);

AndroidDatabaseResults results =
        (AndroidDatabaseResults)iterator.getRawResults();
cursor = results.getRawCursor();

这就是我到目前为止所得到的,但是当我将查询传递给iterator.

时,我收到此错误

java.sql.SQLException: Could not compile this SELECT_RAW statement since the caller is expecting a SELECT statement. Check your QueryBuilder methods.

2 个答案:

答案 0 :(得分:1)

我想我必须回答我的问题。

我仍然无法弄清楚如何重命名列,但我找到了问题的解决方案。

Android Custom Adapter要求名为_id的列为真,但ORMLite不要求列名为id,我错了。它希望您将列标记为id。

在我的模特中,我标记了我的身份,现在它就像一个魅力。

 @DatabaseField(id = true)
 private long _id;

答案 1 :(得分:1)

  

如何在ORMLite中重命名列名?

我不确定我是否理解重命名的含义。我不认为你的意思是模式改变。您是在谈论如何在数据库中分配字段的名称?你可以这样做:

@DatabaseField(id = true, columnName = "_id")
private long id;
  

ORMLite要求我们将列命名为id。

呃,不。 ORMLite不应该关心列的名称。也许你在谈论Android?

  

我正在尝试编写该查询并从此查询中返回Cursor。

这是一个不同的问题吗?

  

java.sql.SQLException:由于调用者期望SELECT语句,因此无法编译此SELECT_RAW语句。检查QueryBuilder方法。

你得到的是因为你在打电话:

newsArticleDao.queryBuilder().selectRaw(...);

然后致电:

query.prepare();

引用javadocs of selectRaw(...)

  

...这会将查询转换为仅适用于Dao.queryRaw(String,String ...)类型语句的内容。

我认为您希望使用columnName指定列的名称。你看过javadocs for @DatabaseField了吗?或者也许在online manual中查找“列名称”?