#java #android #sqlite
#java #Android #sqlite
Вопрос:
Я создал класс и хотел бы включить конструктор, который будет создавать класс из курсора, который будет указывать на базу данных SQLite.
У меня также есть вспомогательный класс базы данных, который находится в том же пакете и имеет статические переменные, которые присваивают метки столбцам в курсоре.
Должен ли я использовать эти ссылки в конструкторе класса или это плохая практика?
Спасибо, m
вот простой общий пример, запрошенный в комментариях…
public class carDbHelper extends SQLiteOpenHelper{
public static final int ROW_ID = 0;
public static final int ROW_TYPE = 1;
...// all db helper code omitted
}
public class Car{
private int id;
private String type;
public Car (Cursor c){
this.id = c.getInt(carDbHelper.ROW_ID);
this.id = c.getString(carDbHelper.TYPE_ID);
}
//Other code omitted
}
Комментарии:
1. Определенно неплохая практика, но лично я всегда стараюсь избегать.
2. Причина, по которой я хочу это сделать, заключается в том, что я хотел бы очистить данные, поступающие от курсора. Особенно в случае getInt() . Это возвращает 0, если поле равно нулю, где, как я бы хотел, оно возвращает -1. Другой вариант, который у меня есть, — переопределить методы курсора, чтобы выполнить некоторую проверку перед его возвратом. Вы бы порекомендовали этот подход?
3. Да, я бы тоже их переопределил. Это самый чистый вариант IMO. посмотрите, что говорят другие, но да, для таких вещей я обычно тоже переопределяю и возвращаю то, что мне больше подходит. Он чистый и дает вам больше контроля.
4. Нет ничего плохого в том, чтобы ссылаться на статические переменные некоторого класса из конструктора того же или другого класса. Пожалуйста, опубликуйте некоторый код, который поможет прояснить ситуацию.
5. Извините, я не могу опубликовать код из-за конфиденциальности. Я думаю, что переопределю методы класса cursor. Немного больно, так как их нужно переопределить!
Ответ №1:
Копирование объекта или ссылка на объект — это хорошо, проблема в том, что вам нужно хорошо контролировать время жизни объекта.
Лично я предпочитаю копировать объект, а не ссылаться на него, поскольку действительно трудно понять, когда объект начинает существовать или уничтожается, если на один и тот же объект имеется много непрерывных ссылок.
Комментарии:
1. В этом случае лучше использовать ссылки, потому что вспомогательный класс, вероятно, имеет имена столбцов
final static Strings
.