首先,我想说我是在编程学校的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/