代码之家  ›  专栏  ›  技术社区  ›  Johan Brink

创建DB实体类时出现NetBeans问题

  •  0
  • Johan Brink  · 技术社区  · 11 年前

    我似乎遇到了NB的问题。我成功地从数据库中创建了一个实体类(有一些初始问题,这似乎是NB中的一个bug)。目标是将数据库从某个位置嵌入到应用程序中。步骤和问题解释如下。

    资源:
    ~数据库[TourismDB]有两个表:“游客”、“旅游”
    ~套餐:META-INF、toursap
    ~文件:persistence.xml、Tourists.java、Tours.java、图尔UI.java

    步骤:
    1.创建包
    2.从数据库创建新的实体类
    3.如果尚未创建,请在PC上创建到DB物理位置的连接
    4.成功完成所有步骤,文件由NB创建,即META-INF包和DB实体类的自定义包
    5.为表创建的一个类文件创建了一个Serializable字段,但将更改为Boolean,并且与原始Serial更改相关的错误也更改为Bool。
    6.创建JFrameForm,添加jTable并将其绑定到Tours表。
    7.更改META-INF\Persistence.xml JDBC url以排除物理位置的真实路径;如。 jdbc:derby:C:\Projects\ToursApp\TourismDB -> jdbc:derby: C:\Projects\ToursApp\ TourismDB
    8.persistence.xml创建必须删除的新行。(见附录1)
    9.在运行JFrame之前保存所有内容。
    10.运行JFrame,NB连接到EclipseLink,然后抛出异常。(应为;请参阅错误1)
    11.重新启动NB并运行文件。一切都能正确编译。

    附录:
    1.持久性.xml
    之前
    Persistence as created by NB

    将元素绑定到JTable Persistence after binding

    更改JDBC URL以排除物理位置。请参见步骤7。

    更改后,运行前 Persistence after changing

    漏洞:
    1.完成步骤1-9后,我第一次构建应用程序,NB抛出异常:

    [EL Info]: 2014-02-15 14:40:08.29--ServerSession(25525711)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
    [EL Severe]: 2014-02-15 14:40:12.342--ServerSession(25525711)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: java.sql.SQLException: Failed to start database 'TourismDB' with class loader sun.misc.Launcher$AppClassLoader@765291, see the next exception for details.
    Error Code: 40000
    Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
    内部异常:java.sql.SQLException:无法使用类加载器sun.misc.Launcher启动数据库“TourismDB”$AppClassLoader@765291,有关详细信息,请参阅下一个异常。
    错误代码:40000

    当这种情况发生时,我重新启动NB并再次编译JFrameForm,这一次,一切都按预期工作。

    为什么会发生这种情况,为什么我必须重新启动NB以使一切正常工作?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Bryan Pendleton    11 年前

    如果重新启动NetBeans允许应用程序成功打开数据库,那么可能发生的情况是,应用程序的前一个副本仍在NetBeans内部运行,并且如果您使用的是DerbyEmbeddedDriver,则Derby一次只允许一个应用程序打开数据库。

    您可以通过检查完整的异常来确认这一点: http://wiki.apache.org/db-derby/UnwindExceptionChain

    您可以切换到使用ClientDriver,也可以确保在再次运行应用程序之前完全停止应用程序的上一个副本。