Внешнее ведение базы данных в текстовом файле. - PullRequest
0 голосов
/ 20 апреля 2009

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

Если быть точным, программа должна быть способна сохранять клиент, IP-адрес и порт при входе в систему и соответственно удалять при выходе из клиента без использования «внутренних» подходов, таких как связанные списки.

РЕДАКТИРОВАТЬ: во-первых, благодаря предложениям, однако в файле есть ограничение, которое я забыл упомянуть, файл должен быть в формате .txt.

точный формат

Имя пользователя IP-адрес Номер порта

Алиса 122,33,44,23 1045

Боб 121.23.12.34 1078

какое другое поле должно быть разделено

Ответы [ 8 ]

2 голосов
/ 20 апреля 2009

Самый простой способ - сохранить его в какой-либо базе данных. Вы не указали требования к формату файла, но очевидным выбором будет текстовый формат CSV.

База данных H2, в частности, поддерживает таблицы CSV .

2 голосов
/ 20 апреля 2009

Возможно, вы захотите взглянуть на методы сериализации данных, такие как JSON , Yaml , или облегченную (основанную на файлах, но не читаемую человеком) базу данных, такую ​​как SQLite .

2 голосов
/ 20 апреля 2009

Установка базы данных, как предложили несколько других авторов, купит вам определенные вещи, такие как безопасность транзакций и возможность расширения того, что вы храните (на данный момент вам нужен только IP / порт, но, возможно, позже вы будете хранить больше вещей а может и более постоянно?)

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

Очень простым решением было бы просто иметь некоторый каталог, в котором каждый раз, когда клиент входит в систему, вы создаете файл, имя которого кодирует требуемую информацию (или хэш идентифицирующей информации, и сохраняете дополнительную информацию в файле). ). Затем, когда клиент выходит из системы, вы удаляете файл. Проблемы, о которых вам нужно быть осторожными, включают в себя то, что происходит, когда ваше приложение ненормально завершается, распределяясь между несколькими каталогами, если у вас более, скажем, несколько тысяч клиентов (в частности, Windows, кажется, выходит из строя, если у вас слишком много файлов в каталог, хотя в принципе вы должны иметь возможность хранить столько данных, сколько захотите) и управлять «проблемами» файловой системы (средство проверки на вирусы обращается к файлу так же, как вам нужно удалить ...).

Это простое решение на самом деле не так плохо, как кажется: система хранения фактически разработана для эффективного доступа и индексирования, как база данных.

1 голос
/ 20 апреля 2009

Я использовал JAXB для сериализации структур данных скромного размера (например, списков) в файл XML и обратно. Преимущества:

  • JAXB является частью Java SE 6, дополнительные библиотеки не требуются.
  • (Де) сериализация занимает около двух строк кода.
  • XML читается человеком.

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

1 голос
/ 20 апреля 2009

Я бы также пошел с hsql, который имеет режим для хранения данных в текстовом файле

http://hsqldb.org/

Тем не менее, текстовый файл БД - это не простой текстовый файл, он содержит несколько операторов SQL с данными. http://hsqldb.org/web/hsqlDocsFrame.html

образец файла базы данных TEXT:

INSERT INTO YOUR_TABLE VALUES('CLIENT1','xyz', .....)
INSERT INTO YOUR_TABLE VALUES('CLIENT2','xyz', .....)
0 голосов
/ 20 апреля 2009

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

0 голосов
/ 20 апреля 2009

Это не Java, но MySQL поддерживает тип таблицы CSV. http://dev.mysql.com/doc/refman/5.1/en/csv-storage-engine.html

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

0 голосов
/ 20 апреля 2009

Вы можете использовать драйвер моста JDBC-ODBC и связываться с соединением ODBC на основе TEXT.

После этого вы можете просто использовать JDBC для выбора, вставки, обновления или удаления записей в файле.

Но даже если это сработает, я бы порекомендовал вам использовать HSQL , SQLite или любую другую облегченную базу данных. Это будет быстрее и надежнее.

Удачи.

...