gpt4 book ai didi

java - 未选择数据库 JPA 持久性

转载 作者:行者123 更新时间:2023-11-29 01:29:55 25 4
gpt4 key购买 nike

我正在连接到我的数据库。我可以毫无问题地执行以下操作:

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 Workbench 中直接尝试了这个调用,但它不起作用。

这个确实有效:

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

我一直在玩游戏,似乎无法在任何地方添加数据库名称(“people”)。这是我目前所拥有的:

使用 EclipseLink 2.0.x

JPA 实现:禁用库配置

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

模式:人

来 self 的 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;
}

}

persistence.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>

最佳答案

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

你的 persistent.xml具有名为“MyFriends”的持久性单元,并配置了 JTA 感知数据源:

<jta-data-source>jdbc/MySQLDataSource</jta-data-source>

此数据源绑定(bind)到JNDI .

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

关于java - 未选择数据库 JPA 持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18816448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com