首先,我想说我是在编程学校的atm上学习的,在称为项目开发的过程中,我收到了上级学生的半成品,以继续进行。因此,不用说我不了解这个项目,再加上我的经验不足,希望您能原谅我可能愚蠢的问题。

它是一个Maven Web应用程序,使用的语言是Java。数据库是simpe JAVA DB(Derby),服务器是Glassfish 4.0。两者都在Netbeans 8.0环境中使用。

现在到实际问题了。该应用程序是一个在线问卷创建工具,因此用户可以创建问题,答案,上传图片等。它确实可以正常工作,所有内容都存储在数据库中并可以持久保存,我手动检查了数据,然后将数据保留在那里关闭应用程序。但是,一旦我重新启动该应用程序,所有数据库内容都会丢失。但是,并不是完全删除,似乎只有ID被删除,因为当我再次上传图片时,出现的是我上次会话上传的旧图片(具有相同的ID)。

Ofc,我首先想到的是persistence.xml,我确实将其表生成策略设置为“无”。
这是我的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并删除了“ create = true”属性。这也没有解决。

我从一个朋友那里听说,有时该程序无法使用新设置正确地重建,因此我必须确保它可以正确清理。因此,我成功清洁了10次该应用程序,然后再次构建所有内容并尝试,但仍然没有结果。我还确保数据库名称与我的persistence.xml和glassfish-ressources.xml中的条目匹配。老实说,我的知识还很有限。

那么,什么导致我每次启动该应用程序时所有数据库内容消失?

如果缺少任何内容,并且您需要进一步的信息,请告诉我,我将尽我所能提供。

最佳答案

您可以检查以下不同内容:

1。


  但是,一旦我重新启动该应用程序,所有数据库内容都会丢失。然而
  并非完全如此,似乎只有ID被删除,因为
  我又上传了一张照片,旧的(具有相同的ID)
  出现上载的上一个会话。


启动数据库后,应确保哪些内容真正存在于数据库中。图片可能会被您的浏览器缓存。为此,您应该单独启动数据库并检查其内容。如果您使用的是NetBeans随附的Derby DB,则可以在NetBeans Services选项卡中执行此操作。

2。

也许Derby是用内存模式配置的,在这种模式下,所有数据库内容都完全存储在内存中,如果重新启动数据库,则会丢失所有内容。您应该检查为持久性单元设置的JDBC URL。如果网址看起来与此相似

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


数据库配置有内存模式。您可以通过特定Derby连接池的Additional Properties选项卡中的GlassFish管理GUI检查设置。

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语句。

关于java - 每次启动应用程序时,数据库内容都会被删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26530109/

10-15 18:12
查看更多