2014-01-13 3 views
0

Как мы можем переименовать имя столбца в ORMLite?Как переименовать столбцы в ORMLite?

Я пытаюсь написать этот запрос SELECT id as _id from some_table

Android Cursor переходника требует от нас, чтобы иметь столбец с именем _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.

+0

Ваша одиночная цитата вокруг id выглядит странно. У вас есть угловой «вместо прямой». Может это просто опечатка? – NigelK

+0

Я положил его во время игры, так как это делает ORMLite, и это не проблема, вы можете его игнорировать. Иначе это не даст этой ошибки. Мой запрос правильный. Я просто не знаю, как применить этот запрос к «DAO» и получить результаты. –

ответ

1

Я предполагаю, что я должен ответить на мой вопрос.

Я все еще не мог понять, как переименовать столбец, но я нашел решение проблемы.

Android Custom Adapter требует столбца с именем _id, что это правда, но ORMLite не требует имени столбца быть id, я был неправ об этом. Он хочет, чтобы вы отмечали столбец как id.

В моей модели я обозначил свой идентификатор, и теперь это работает как шарм.

@DatabaseField(id = true) 
private long _id; 
1

Как мы можем изменить имя столбца в ORMLite?

Не уверен, что я понимаю, что вы подразумеваете под переименованием. Я не думаю, что вы имеете в виду изменение схемы здесь. Вы говорите о том, как назначить имя поля в базе данных? Вы можете сделать:

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

ORMLite требует от нас, чтобы иметь столбец с именем идентификатор.

Uh, no. ORMLite не должно волновать, что такое имя вашего столбца. Может быть, вы говорите об Android?

Я пытаюсь написать этот запрос и вернуть курсор из этого запроса.

Это другой вопрос?

java.sql.SQLException: Не удалось скомпилировать этот оператор SELECT_RAW, поскольку вызывающий объект ожидает оператор SELECT. Проверьте методы QueryBuilder.

Вы получаете это потому, что вы звоните:

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

А затем вызвать:

query.prepare(); 

Цитата из javadocs of selectRaw(...)

... Это превратит запрос в нечто подходящее только для Dao.queryRaw (String, String ...) тип утверждения.

Я думаю, что вы хотите присвоить имя своей колонки, используя columnName. Вы посмотрели на javadocs for @DatabaseField? Или, может быть, посмотрите «имя столбца» в online manual?

+0

Я говорил о «SELECT id as _id», когда передаю «Курсор» на адаптер. 'CursorAdapter' требует' _id'. В моем ответе внизу я объяснил, что (я понял, что, проведя часы), как вы сказали, 'ORMLite' не требует, чтобы имя столбца было' id', но 'ORMLite' хочет, чтобы мы отмечали столбец как id (id = true). Поэтому я создал столбец с именем '_id' и обозначил id = true. Таким образом, он удовлетворяет требованиям «ORMLite» и «CursorAdapter». Спасибо за ваше объяснение, я проверю javadocs. –

Смежные вопросы