【问题标题】:Simple Connection to Database in Java EEJava EE 中到数据库的简单连接
【发布时间】:2015-05-17 23:28:12
【问题描述】:

我是 Java EE 的新手;我在使用 WebForms 和 MVC 的 ASP .NET 方面有很好的背景。我发现在 Java EE 中没有什么比在 ASP .NET 中更容易的了。尽管如此,我要做的只是在 JBoss 运行时使用持久性连接到本地 Oracle Express 数据库。我绝对要疯了,试图让它发挥作用。在 ASP .NET 中,我所要做的就是指定一个连接字符串和 walla。如果有人能告诉我我做错了什么或指出我在 Eclipse 中使用 JPA 的好资源,我将不胜感激。

这是我的代码:

persistence.xml

我确信数据库属性是正确的; eclipse 能够成功 ping。

<?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="Testing" transaction-type="RESOURCE_LOCAL">
        <class>model.Testq</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
            <property name="javax.persistence.jdbc.user" value="system"/>
            <property name="javax.persistence.jdbc.password" value="admin"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
        </properties>
    </persistence-unit>
</persistence>

Testq 类

这个类只是java中的一个简单实体,用于oracle数据库中一个非常简单的表。

package model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@NamedQuery(name="Testq.findAll", query="SELECT t FROM Testq t")
public class Testq implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="T_ID")
    private long tId;

    private String descr;

    public Testq() {
        tId = 0;
        descr = "ONE";
    }

    public long getTId() {
        return this.tId;
    }

    public void setTId(long tId) {
        this.tId = tId;
    }

    public String getDescr() {
        return this.descr;
    }

    public void setDescr(String descr) {
        this.descr = descr;
    }

}

数据库小服务程序

我正在使用它来显示来自数据库的查询结果,但它在第 28 行失败。

package com.db;

import java.io.IOException;
import java.io.PrintWriter;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Testq;

@WebServlet("/DB")
public class DB extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public DB() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Testq test = new Testq();
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Testing");
        EntityManager em = emf.createEntityManager();
        test = em.createNamedQuery("Testq.findAll", Testq.class).getSingleResult();
        em.close();
        emf.close();
        PrintWriter out = response.getWriter();
        out.println(test.getDescr());
    }
}

【问题讨论】:

  • “失败了...” ... 如何失败了?
  • 我会打开一个端口让您查看错误。现在它实际上在第 37 行,这不是 DB.class 中的一行
  • 那么堆栈跟踪会更有帮助。你真的应该自己实例化 Entitymanager 吗?我会让他们被注射。第 37 行应该是哪一行??
  • javax.persistence.PersistenceException: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Exception Description: Configuration error. Class [oracle.jdbc.OracleDriver] not found.
  • 运行代码时它不在类路径中。它需要在 WEB-INF/lib 中。

标签: java oracle jakarta-ee jpa


【解决方案1】:

非常感谢大家。事实证明,驱动程序必须在 WEB-INF 的 lib 文件夹中。非常感谢您的所有帮助,特别是 Thorbjørn Ravn Andersen 在我厌倦了处理它时发现了错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多