我正在与NetBeans斗争,未能使一个项目(Vaadin -> Maven基于)连接到SQLite数据库。由于某些原因,每次我运行我的项目:
- NetBeans启动Apache Derby数据库
- JPA不生成表在我的SQLite表(可能因为我从来没有设法连接到它)
我做了以下的事情:
- "安装"SQLite JDBC驱动程序 -下载jar,转到Services -> Database并创建一个指向jar的新连接。我把它命名为SQLite 3.8.11.2。已成功添加并列在Databases -> Drivers下。
- 添加到数据库的连接—数据库是使用命令行工具创建的,位于NetBeans Maven项目的根目录中。目前它是空的,因为我想使用JPA从各自的实体类生成我的表。我添加了连接,它指向
cookbook.sqlite
文件。为了检查事情是否在这个阶段工作,我使用NetBeans的用户界面创建了一个小表,添加了一堆东西,然后使用终端检查数据库文件是否已经更改以及它包含的内容。没有问题。 解析Maven依赖项 -到我的项目
pom.xml
内的<dependencies/>
,我添加:<dependencies> <!-- various other dependencies mostly related to Vaadin --> ... <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.2</version> <scope>provided</scope> </dependency> </dependencies>
创建一个持久化单元 -我有3个实体类-
User
,Ingredient
和Recipe
。生成的persistence.xml
包含:<?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="CookbookPU" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <non-jta-data-source>cookbook_db</non-jta-data-source> <class>com.ava.cookbook.models.User</class> <class>com.ava.cookbook.models.Ingredient</class> <class>com.ava.cookbook.models.Recipe</class> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/> <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:/PATH_TO_PROJECT_ROOT/cookbook_db.sqlite"/> <property name="javax.persistence.jdbc.user" value="cookbook"/> <property name="javax.persistence.jdbc.password" value="cookbook"/> <property name="eclipselink.logging.level" value="FINEST"/> </properties> </persistence-unit> </persistence>
注意模式生成被设置为drop-and-create
。
基本上这些是我的设置。当我尝试在输出窗口中运行项目时,出现了四个新选项卡:
- Run (Cookbook) -这一个告诉我关于运行项目状态的信息(因为我还没有开始实际访问数据库(我无法连接到:3)它运行得很好)
- GlassFish Server 4.1 -项目在 上运行的GlassFish服务器的信息
- 浏览器日志 -我正在使用NetBeans连接器,同时在Google Chrome内运行Vaadin项目,此选项卡显示了一堆Vaadin相关的事件
Java DB数据库进程 -这是所有这一切的bummer。详细的消息如下:
Fri Oct 09 15:02:47 CEST 2015 : Security manager installed using the Basic server security policy. Fri Oct 09 15:02:48 CEST 2015 : Apache Derby Network Server - 10.11.1.2 - (1629631) started and ready to accept connections on port 1527
在我看到之前,我认为我已经把整个JPA-Entity-thing搞砸了,但是在我注意到第二个消息之后,特别是它变得很明显,该项目没有连接到SQLite数据库,而是运行它自己的Derby DB。
我对Maven, EclipseLink, JPA和NetBeans几乎没有任何经验,所以很可能我忽略了一些东西。如能提供建议或解决方案,我将不胜感激。
如果连接已经设置错误。
- 使用Netbeans菜单:Windows -> Services显示服务选项卡 <
- 扩展服务器/gh>
- 扩展GlassFish服务器 <
- 扩大资源/gh>
- 扩展JDBC
- 扩展JDBC资源 选择您的资源名称。
- 右键选择属性。注意池名称
- 扩展连接池
- 选择您刚才注意到的Pool 编辑属性以使用sqlite而不是derby。URL应该是
jdbc:sqlite:<path to cookbook.sqlite>
如果你没有设置资源。
- 选择你的项目。
- 右键单击新建->其他 在对话框中选择类别= Glassfish,文件类型= JDBC资源选择"Create New JDBC Connection Pool"。
- 将名称更改为您的资源名称
- 点击"下一步"两次
- 将连接池名称设置为您可以记住的名称
- 设置数据源类名为任何你想要的。 设置资源类型javax.sql.ConnectiPoolDataSource
- 单击Next
- 在对话框的最后一屏检查设置,然后单击Finish。
创建映射到表的类:
- 选择你的项目。
- 右键单击新建->其他
- 在对话框中选择类别=持久性,文件类型=实体类
- 更改类名和包名
有一些教程可能是值得你快速完成的,即使它们也涵盖了一些不相关的材料,它们也不是那么长。
Java EE应用程序入门
使用MySQL数据库创建一个简单的Web应用程序
和
查看示例,在File> New Project> Samples> Java EE> Web JPA