Что сохранить в живых и что воссоздать в простой встроенной базе данных? - PullRequest
1 голос
/ 10 марта 2010

В настольном приложении со встроенной базой данных Derby, что я должен поддерживать (в отличие от воссоздания каждый раз при разговоре с базой данных) в течение всего срока службы приложения?

  1. Connection и Statement, используя одно и то же выражение в течение всего жизненного цикла программы?
  2. Connection, многократно воссоздавая утверждение?
  3. Ни один из них. То есть воссоздание связи и выписки повторно?

С точки зрения любителя базы данных было бы разумно избегать воссоздания чего-либо, что не требует воссоздания, но является ли вариант 1 (или 2) противоречащим стандартным методам или есть некоторые очевидные минусы? (Ре) создание связей и заявлений дорого или нет?

Ответы [ 2 ]

1 голос
/ 10 марта 2010

В встроенном приложении Derby объекты Connection и Statement довольно дешевы, и я думаю, что вам не следует беспокоиться о их создании по мере необходимости. В комплектах модульных тестов Derby мы создаем десятки тысяч соединений и сотни тысяч операторов без проблем.

Также можно хранить объекты Connection и Statement так долго, как вы этого хотите. Встроенное дерби не имеет ограничения по времени и не будет отбрасывать объекты соединений или операторов, пока вы не скажете это (закрыв их) или пока вы не удалите их, и в этом случае сборщик мусора очистит их (в конце концов).

Хотя поддерживать соединение нормально, вы должны зафиксировать () транзакцию, когда она будет завершена (если, конечно, вы не запускаете в режиме автоматической фиксации).

И, если вы сохраняете результирующий набор, помните, что фиксация транзакции обычно также закрывает результирующий набор, за исключением того, что вы специально создаете специальные результирующие наборы, которые остаются открытыми при фиксации.

1 голос
/ 10 марта 2010

Подключение действительно дорого (может стоить несколько сотен миллисекунд). Однако соединение имеет ограниченный срок службы, а оператор и набор результатов зависят от его времени жизни. Средняя база данных прервет соединение и сбросит соединение всякий раз, когда оно освобождается в течение более 30 минут. Вы можете добавить некоторую проверку тайм-аута в свой код, чтобы он автоматически повторно установил соединение, но это утомительная работа и очень подвержена ошибкам, если вы не знаете, как это должно работать под капотами. Вместо этого используйте существующий, тщательно разработанный и надежный пул соединений, такой как C3P0 , и напишите код JDBC обычным способом (приобретите и , закройте все ресурсы в кратчайшие возможные сроки. объем). Так и должно быть.

Хотя теоретически (и, по-видимому, также на практике) подключение к встроенным базам данных будет дешевле, а подключение может существовать вечно, я бы категорически не согласился по-разному подходить к встроенным базам данных в коде JDBC. Это сделало бы ваш код JDBC семантически некорректным и совершенно непереносимым. Вы должны переписать / переопределить все, когда захотите, и / или перейти на реальный сервер RDBMS с более широкими возможностями.

...