当前位置: 首页 > 知识库问答 >
问题:

没有数据库选择JPA持久化

呼延衡
2023-03-14

我有连接到我的数据库运行。我可以执行以下没有问题:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/people", "root", "r00t");

PreparedStatement statement = (PreparedStatement) conn.prepareStatement("select * from users");
ResultSet result = statement.executeQuery();

然而,在设置了JPA和持久类之后,我总是得到一个“未选择数据库”错误。看起来我不需要调整我的数据库配置(MySQL连接到Glassfish 3.1),否则上面的代码将无法工作。

正在拨打的电话:

SELECT USERNAME, FIRSTNAME, LASTNAME, PASSWORD, PERMISSION FROM users

我尝试过这个调用直接在MySQL工作台和它不工作。

这一个确实有效:

SELECT USERNAME, FIRSTNAME, LASTNAME, PASSWORD, PERMISSION FROM people.users

我一直在玩游戏,似乎无法在任何地方添加数据库名称(“人”)。以下是我目前掌握的情况:

使用EclipseLink 2.0。十、

JPA实现:禁用库配置

连接:本地MySQL(我已成功连接数据库)

图式:人

从我的servlet:

package com.lowe.samples;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
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 com.mysql.jdbc.PreparedStatement;

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

    @PersistenceContext
    private EntityManager em;

    public TestServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter out = response.getWriter(); 
        out.println("<h1>DataBase Test:<h1>");

        try {

            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/people", "root", "r00t");

            PreparedStatement statement = (PreparedStatement) conn.prepareStatement("select * from users");
            ResultSet result = statement.executeQuery();

            // prep the table
            out.print("<table border=\"5\">");
            out.print("<tr>");
            out.print("<td>UserName</td>");
            out.print("<td>FirstName</td>");
            out.print("<td>LastName</td>");
            out.print("<td>Password</td>");
            out.print("<td>Permission</td>");
            out.print("</tr>");

            while(result.next()) {
                out.print("<tr>");
                out.print("<td>" + result.getString(1) + "</td>");
                out.print("<td>" + result.getString(2) + "</td>");
                out.print("<td>" + result.getString(3) + "</td>");
                out.print("<td>" + result.getString(4) + "</td>");
                out.print("<td>" + result.getString(5) + "</td>");
                out.print("</tr>");
            }

            out.print("</table>");

            User u = (User)this.em.createNamedQuery("User.findAll").getResultList();
            out.print("User Name: " + u.getFirstName());

        } catch (ClassNotFoundException e) {
            out.print("<h4>" + e.getMessage() + "</h4>");
            e.printStackTrace();
        } catch (SQLException e) {
            out.print("<h4>" + e.getMessage() + "</h4>");
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}

我的坚持课:

package com.lowe.samples;

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


/**
 * The persistent class for the users database table.
 */
@Entity
@Table(name="users")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private String userName;

    private String firstName;

    private String permission;

    private String lastName;

    private String password;

    public User() {
    }

    public String getUserName() {
        return this.userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getPermission() {
        return this.permission;
    }

    public void setPermission(String permission) {
        this.permission = permission;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

坚持。xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="MyFriends">
        <jta-data-source>jdbc/MySQLDataSource</jta-data-source>
        <class>com.lowe.samples.User</class>
    </persistence-unit>
</persistence>

共有3个答案

孟子墨
2023-03-14

如果你正在使用hbm。请尝试以下方法

<class name="com.javapapers.data.user"  table ="user"  catalog
="<DBNAME.Schema>">
贺乐意
2023-03-14

如果在指定db url时使用jta数据源或使用hibernate属性,请在db ip地址后提及db名称,如jdbc: mysql://: 3306/。如果在您的实体中不可能这样做,您可以指定表所在的数据库@Table(name="abcd", catalog="dbname/schema name")如果您使用来自一台服务器的多个数据库,也可以这样做。

常明亮
2023-03-14

第一段代码是使用JDBC加载数据库驱动程序、连接和执行查询。它工作的事实表明,您的类路径中有MySQL驱动程序,并且您可以使用提供的URL和凭据连接到数据库。这与JPA无关。

你的坚持。xml具有名为“MyFriends”的持久化单元,并配置了一个支持JTA的数据源:

此数据源绑定到JNDI。

根据您收到的错误,连接池配置错误,可能在URL中缺少数据库名称。

 类似资料:
  • 问题内容: 我想创建一个作业,但是我想在没有任何数据库持久性的情况下运行它。不幸的是,spring-batch要求以某种方式将作业周期写入数据库,从而迫使我至少提供某种带有transactionmanager和Entitymanager的数据库。 是否可以防止元数据并独立于txmanagers和数据库运行? 更新: 问题答案: 我回到我自己的问题上,因为该解决方案不再起作用。从spring-bat

  • Mine当前使用的是application.properties文件中包含: 提前致谢

  • 问题内容: 我试图使用Hibernate和JPA设置Spring,但是当试图持久化一个对象时,似乎什么都没有添加到数据库中。 我正在使用以下内容: 在AccountManager中,我正在做: 交流电来自哪里: 有谁能指出我做错了什么?持久调用返回而不会引发异常。如果之后我这样做,则返回true。 如果有人需要,请按以下步骤定义帐户: 问题答案: 多亏了eric和Juan Manuel的回答,我才

  • 目的 配置 NFS 共享为 OpenShift 节点提供存储,并且配置 OpenShift 持久卷以绑定至数据库 Pod。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 配置 NFS 共享持久卷1. 登录到 NFS 服务器 # ssh nfs.example.com2. 创建 config-nfs.sh 脚本,内容如下 #!/usr/bin/sh exp

  • 我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我

  • 我正在开发一个服务,在该服务中,我侦听队列,反序列化接收到的消息,并将它们持久化到数据库(Oracle)。大致情况: 在缺省消息侦听器bean中,我设置并发性和setSessionTransactived(true)。这足以使整个onMessage具有事务性吗?因此,在一个事务中接收并保存一条消息,并在其中任何一点出现故障时回滚?当试图保存特定消息时,我尝试对其抛出异常,消息确实被回滚到队列,侦听