Простая библиотека базы данных Java?

Я ищу библиотеку для управления «базой данных» в моем приложении Java. Я хочу что-то простое и удобное в использовании. В частности, я ищу что-то, что:

  • Легко начать использовать. Я хотел бы иметь один JAR для добавления в свой проект, а база данных - это один файл Java File. Я хочу избежать необходимости настраивать локальный сервер или соединения и тому подобное. Полностью Java без нативных зависимостей было бы неплохо.

  • Прост в использовании. Мне нужно только хранить таблицу с некоторыми строками и выполнять простые запросы, например. для всего в определенной строке.

  • Легкий.

Я в основном ищу что-то, чтобы эмулировать своего рода «таблицу», например лист Excel, с текстовыми данными.

Есть такие библиотеки?

Мой первый вопрос здесь, поэтому, пожалуйста, будьте нежны :-)
Как говорится в ответе Flimzy, вам нужно предоставить больше информации. [A] Какая база данных: плоская, реляционная, ключ-значение, документ, объект? Если вы не разбираетесь в типах, то приведите небольшие, но конкретные примеры данных. [B] Предполагается ли, что база данных будет встроена в приложение и будет использоваться только приложением, или база данных должна принимать подключения от других приложений/клиентов?

Ответы (6)

Н2

Не имея более конкретной информации о ваших потребностях, я первым делом подумал о проекте H2 Database Engine . H2 — это чистая Java, бесплатная реляционная база данных с открытым исходным кодом, которая активно развивалась в течение многих лет.

«2» указывает на то, что это вторая подобная база данных (Hysonic SQL, позже разветвленная как HSQLDB ), созданная ее основным автором, Томасом Мюллером , так что он знает свое дело.

Хотя H2 можно запускать как сервер, он особенно хорош для встраивания в приложение и при необходимости может работать с относительно небольшим объемом памяти.

Будучи чистой Java, H2 создан специально для доступа JDBC . Поставляется в комплекте с собственным драйвером JDBC.

На основном веб-сайте есть хорошая документация, включая обзор QuickStart и Tutorial .

Вам нужно будет изучить основы таблиц, столбцов, типов данных и команд SQL. Вы можете научить себя. Получение некоторого обучения от кого-то, кто знаком с реляционными базами данных, значительно сократит эту кривую обучения.

H2 похож на SQLite, но более полнофункционален. Чистая Java и возможность встраивания делает H2 более подходящим для ваших нужд и, вероятно, более простым для начала работы.

На дочернем сайте Stack Overflow я написал несколько ответов, предоставляющих исходный код для полного примера приложения Java с использованием H2. Как это , это , это , это , это и многое другое .

дерби

Проект Apache Derby очень похож на H2. Ранее известный как IBM Cloudscape , а также известный как «Java DB», когда он предоставляется Oracle в комплекте с Java SDK.

Derby сложнее H2, в том числе нацелен на использование в качестве сервера. Я подозреваю, что H2 лучше подходит для ваших нужд.

Файлы

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

Общие форматы для таких простых текстовых файлов включают:

  • CSV , значения, разделенные запятыми.
  • ТСВ . Разделяется таб .
  • Разделители ASCII , коды ASCII # 28-31.
    Отмечает файл, группу, запись и блок/поле). Менее распространенный, чем Tab, но более разумный и гибкий)

Обратите внимание, что хотя CSV звучит просто, различные программисты нашли способы смешивать вещи с вариациями. В течение десятилетий никто даже не удосужился записать спецификацию до RFC 4180 в 2005 году.

Когда вам нужны эти данные, прочитайте их в памяти, создайте экземпляры объектов, определив свои собственные классы, такие как «Лицо» или «Счет», соберите эти объекты и выполните поиск в этих коллекциях, чтобы найти нужные объекты.

Хотя концептуально это просто, существует множество возможных недоразумений. Одно из основных назначений ядра базы данных — решать такие проблемы за вас.

  • Вы должны обязательно закрывать файлы после их использования, хотя при выходе или сбое JVM должна автоматически закрывать все открытые файлы.
  • Вы можете подумать о повреждении файла. Что делать, если приложение аварийно завершает работу или прерывается во время записи файла? Один из способов справиться с этим — написать новый файл и только потом удалить старый.
  • Если вы используете многопоточность, вам необходимо защититься от проблем параллелизма. Вы не хотите, чтобы разные потоки пытались одновременно заменить данные для одного и того же файла.

Общий CSV-файл Apache

Проект Apache Commons CSV — это относительно новая бесплатная библиотека на чистом Java, предназначенная для выполнения рутинной работы по чтению и записи простых текстовых файлов. Он поддерживает все упомянутые форматы, а не только CSV (несмотря на его название). Я использовал версию 1.1 и нашел ее весьма полезной, надежной и надежной.

Ваш вопрос слишком широк, чтобы на него можно было дать какой-либо окончательный ответ. Вы вообще не говорите нам, какую базу данных вы хотите использовать. Вам нужна РСУБД? Хранилище ключей/значений? Что-то другое?

Если вы имеете в виду реляционную базу данных, SQLite является стандартом де-факто и имеет поддержку Java (а также поддержку практически любого другого языка и платформы под солнцем).

Спасибо, я постараюсь улучшить свой вопрос. Я в основном ищу что-то, чтобы эмулировать своего рода «таблицу», например лист Excel, с текстовыми данными. SQLite подойдет, но я ищу что-то попроще.
@JonasCz: SQLite по-прежнему отвечает всем вашим заявленным требованиям: нет серверов для настройки, соединений и т. д.

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

Кходус

Основываясь на ваших требованиях, я думаю, что JetBrains Xodus — это отличный выбор базы данных. Он имеет три типа базы данных: хранилище ключей и значений, хранилище сущностей и базу данных для файлов и потоков.

№1 : Начать пользоваться очень просто. Если вы используете maven, просто добавьте одну или две зависимости . Или вы также можете импортировать .jarфайлы прямо в свой проект.

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

final Environment env = Environments.newInstance("/Users/me/.myAppData");

#2 : Вместо управления таблицами вы можете просто хранить сущности. Это очень похоже на реляционные таблицы, но намного проще. Посмотрите здесь, чтобы узнать, как это сделать.

final Entity user = txn.newEntity("User");
user.setProperty("login", loginName);
user.setProperty("fullName", fullName);
user.setProperty("email", email);
final String salt = MessageDigestUtil.sha256(Double.valueOf(Math.random()).toString());
user.setProperty("salt", salt);
user.setProperty("password", MessageDigestUtil.sha256(salt + password)); 

№ 3. Более легкая, чем любая другая доступная нереляционная база данных. См. их тест производительности .

Другой вариант — MapDB . Это также быстрое хранилище ключей и значений с открытым исходным кодом, написанное на Java.

Трагедия вопросов высокого уровня на форумах Stack! «Рекомендации по программному обеспечению» — хорошее место, но мало посещаемое. Я нашел в Stack Overflow почти тот же вопрос в нескольких версиях с еще несколькими хорошими ответами:

в нем есть ссылки на обзорные статьи и некоторые дополнительные упоминания:

  • УровеньБД
  • Беркли БД
  • jsondb.io