2014-10-23 7 views
2

Сначала я хочу сказать, что я в школе программирования, и в курсе, называемом разработкой проекта, я получил половину готового проекта от старших, чтобы продолжить. Так что, разумеется, я не знаю проект наизусть и что в паре с моей неопытности, надеюсь, вы сможете простить мои, возможно, глупые вопросы.Содержимое БД удаляется каждый раз, когда я запускаю приложение

Это веб-приложение Maven, использующее язык Java. База данных представляет собой Simpe JAVA DB (Derby), сервер - Glassfish 4.0. Оба они используются в среде Netbeans 8.0.

Теперь актуальная проблема. Приложение представляет собой инструмент для создания онлайн-анкеты, поэтому пользователь может создавать вопросы, отвечать, загружать изображение и т. Д. И он работает, все хранится в БД и сохраняется, я проверил вручную, и данные есть и остаются там после закрытие приложения. Однако, как только я заново запускаю приложение, все содержимое БД теряется. И все же не совсем, кажется, что только идентификатор удаляется, поскольку, когда я снова загружаю изображение, вместо него появляются старые (имеющие одинаковый идентификатор), которые я загрузил в последний сеанс.

Ofc, моя первая мысль была persistence.xml, и я установил для нее Стратегию создания таблиц «none». Вот мой persistence.xml (EclipseLink (JPA 2.1)):

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="OnlineTestCreatorPU" transaction-type="JTA"> 
    <jta-data-source>jdbc/online_test_creator_db</jta-data-source> 
    <properties> 
    </properties> 
    </persistence-unit> 
</persistence> 

Этой техника его подводит решить вопрос либо, так что потом я пошел в GlassFish-ressources.xml и удалил "создает = истинное" Свойство. Это тоже не решило.

Я слышал от друга, что иногда программа не восстанавливается с новыми настройками должным образом, и я должен убедиться, что она очищает правильно. Таким образом, я очистил приложение 10 раз успешно и снова создал все, но не добился результата. Я также удостоверился, что имя базы данных совпадает с записями в моем файле persistence.xml и glassfish-ressources.xml. Я честно в конце моих (довольно ограниченных) знаний.

Так что же может привести к тому, что все содержимое моей базы данных исчезнет при каждом запуске приложения?

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

ответ

1

Есть разные вещи, которые вы можете проверить:

1.

Однако, как только я снова запустить приложение, все содержимое БД теряется. Тем не менее, не совсем полностью, кажется, что только идентификатор удаляется, так как после я загружаю изображение снова, вместо этого загружаются старые (с тем же идентификатором), что и я, .

Вы должны убедиться, какой контент действительно находится в базе данных после его запуска. Изображения могут быть кэшированы вашим браузером. Чтобы проверить это, вы должны запустить базу данных самостоятельно и проверить содержимое. Если вы используете Derby DB, который поставляется с NetBeans, вы можете сделать это на вкладке NetBeans Services.

2.

Может быть Derby сконфигурирован с InMemory-режиме, в этом режиме все содержимое базы данных хранится укомплектовать в памяти и теряется при перезапуске базы данных. Вы должны проверить URL-адрес JDBC, который настроен для единицы постоянства.Если URL-адрес похож на этот код

jdbc:derby://myhost:1527/memory:myDB;create=true 

база данных сконфигурирована в режиме inmemory. Вы можете проверить настройки с помощью графического интерфейса администратора GlassFish на вкладке Additional Properties конкретного пула соединений Derby.

3.

Там может быть какая-то логика в приложении, которое удаляет или переписывает старые записи базы данных. Вы можете легко отладить это, активировав ведение журнала SQL. В вашей persistence.xml добавить следующее:

<property name="eclipselink.logging.level" value="ALL"/> 
<property name="eclipselink.logging.parameters" value="true"/> 

Если ваш используете EclipseLink 2.4.0 или выше:

<property name="eclipselink.logging.level.sql" value="ALL"/> 
<property name="eclipselink.logging.parameters" value="true"/> 

Это покажет все SQL-операторы, которые приходят из вашего приложения.

+1

Большое спасибо за информативный ответ. Фактическое решение было более простым, очевидно, отключив компьютер, оставив его на ночь, а затем снова попробовав помощь, теперь он работает только с стратегией создания таблицы, установленной на «Нет». Мое единственное предположение, что он продолжал использовать старую версию persistence.xml, которая могла быть в ОЗУ, и каким-то образом удалось избежать моей очистки и даже перезапустить Netbeans. Однако ваш ответ по-прежнему был очень информативным, и, особенно, пункт 3., теперь будет огромной помощью. Так что спасибо тебе. – 404KnowledgeNotFound

+0

Добро пожаловать :) – unwichtich