| 
 | 
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Большинство примеров в книгах и интернете советуют создавать CRUD-функции прямо в классе, унаследованном от SQLiteOpenHelper (у меня этот класс называтся CustomSQLiteOpenHelper), сразу после onCreate и onUpgrade. Для меня это неприемлемо - для каждой сущности (например, Emp, Dept и т.д.) я хочу создавать отдельные классы для операций с БД (например, EmpCrud, DeptCrud и т.д.) - вместо того, чтобы сваливать всё в одну немыслимую кучу внутри CustomSQLiteOpenHelper. Каждая CRUD-функция в этих классах должна иметь доступ к базе данных, т.е. поинтер на объект класса SQLiteDatabase (через который будут вызываться rawQuery(), insert() и т.п.). Есть два варианта как этот поинтер организовать - хотелось бы услышать от знатоков любые за и против касаемо каждого. Вариант номер 1: Каждая Activity создаёт для себя экземпляр SQLiteDatabase и передаёт его в качестве аргумента при создании экземпляров ХххCrud классов. Например, в классе EmpActivity объявляем следующие пропертиз: Код: java 1. 2. 3. Соответственно, в EmpActivity.onStop() пишем: Код: java 1. Вариант номер 2: Каждый ХххCrud класс наследуется от CustomSQLiteOpenHelper, например: Код: java 1. 2. 3. Тогда наследники будут просто иметь экземпляр SQLiteDatabase внутри себя: Код: java 1. 2. 3. 4. 5. 6. 7. Как известно, эти пропертиз - вызовы функций getWritableDatabase и getReadableDatabase, которые при первом к ним обращении создают соединение и размещают его в кеше, а затем возвращают его при последующих вызовах. Соединение должно быть закрыто в конце работы аппликации, для чего добавляем в функцию CustomSQLiteOpenHelper.close(): Код: java 1. 2. Затем в каждом Activity создаём экземпляр соответствующего ХххCrud класса. Например, в EmpActivity объявляем: Код: java 1. Недостатком варианта номер 2 видится то, что ХххCrud классы будут тяжеловесней (т.к. уинхерят все поля предка). Но зато меньше писанины (тем более что эта писанина - голимый code duplication). 99% сайтов (и 100% прочитанных мною книг) предлагают не его, а пихать всё в одну кучу внутри CustomSQLiteOpenHelper, а ХххCrud классы вообще не создавать (намного реже - метод номер 1, а метод 2 вообще можно искать со свечкой). В своей "тренировочной" аппликации я использую метод 2, но как-то странно, что "нас так мало" - возможно, я чего-то не вижу. Хотелось бы услышать мнение зубров. Лишь добавлю, что я только начал имплеметировать, и аппликацию пока не запускал, так что все приведённые примеры кода ещё не проверялись (наверняка что-то не учёл, но для иллюстрации вопроса сойдёт). ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.12.2019, 16:28 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.12.2019, 09:04 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  pand, Спасибо! Напоминает MyBatis, с которым мне приходилось иметь дело. В чём именно его удобство? И в чём неудобство (или потенциальные проблемы) прямого вызова функций класса SQLiteOpenHelper? Это практический вопрос, а не спор, если чё. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.12.2019, 19:59 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ursego, room это orm которая избавляет от рутины парсить резалт сеты и параметры. можно использовать в связке с RxAndroid. насколько я помню можно получить доступ к контексту базы и работать как с dbHelper.writableDatabase если есть необходимость или желание . из минусов рума - использование рефлексии ( минус на любителя ) . ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.12.2019, 22:00 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  pand, thanx! ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.12.2019, 22:01 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ursego, А чего Вы просто не используете паттерн Singelton. У меня Sqlhelper как у Вас...Но дальше я базу раздаю singeltonОМ Код: java 1. 2. 3. 4. 5. 6. 7. 8. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.12.2019, 14:04 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  irbis_al, В догонку Существующий заполненный SQLite файл скомпилировать(сбуилдить) в apk (Андроид Студио) Тут весь код.(В ветке sqlite) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.12.2019, 14:12 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  irbis_al, это решение всё равно бы поощряло дублирование кода - копипейст цвёл бы и пах. Я решил сделать иначе - запихал повторяющийся код в generic functions, а конкретные model-классы поставляют ему "уникальную" для них информацию, переопределяя функции extractContentValues() и populateFromCursor() интерфейса Crudable, которые все model-классы обязаны имплементировать. Это ещё не окончательный вариант, а скорее первичный набросок, который её допиливать и допиливать - можете глянуть  здесь . Буду рад если опытные коллеги подправят или подкинут идей. Если довести до ума, то можно таскать за собой из проекта в проект. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.12.2019, 05:57 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ursego irbis_al, это решение всё равно бы поощряло дублирование кода - копипейст цвёл бы и пах. Я решил сделать иначе - запихал повторяющийся код в generic functions, а конкретные model-классы поставляют ему "уникальную" для них информацию, переопределяя функции extractContentValues() и populateFromCursor() интерфейса Crudable, которые все model-классы обязаны имплементировать. Это ещё не окончательный вариант, а скорее первичный набросок, который её допиливать и допиливать - можете глянуть  здесь . Буду рад если опытные коллеги подправят или подкинут идей. Если довести до ума, то можно таскать за собой из проекта в проект. Вот вообще нет ни разу дублирование кода... Е Код: plsql 1. 2. 3. С концепцией по ссылке я не согласен.(Это тоже не истина в последней инстанции,просто какой-то разработчик решил ,что так будет лучше для всех) Когда Я писал на java ..я делал класс который рисует ListView и от него наследовался. Сейчас я пишу на Flutter и сделать это намного на нём проще и изящнее. Вот тут https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1319817&msg=22032806 Обсуждалось можно посмотреть видео Flutter и код. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.12.2019, 10:50 | 
  
  
  
   | 
||
| 
 
Вопрос матёрого новичка про доступ к БД из разных объектов 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  irbis_al Вот вообще нет ни разу дублирование кода... irbis_al С концепцией по ссылке я не согласен. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.12.2019, 02:10 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=13&msg=39903244&tid=1330773]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    41ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    50ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 15ms | 
| total: | 151ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.