【问题标题】:Can not connect with mysql database in jspjsp中无法连接mysql数据库
【发布时间】:2015-09-01 07:47:32
【问题描述】:

我在运行 web 应用程序后尝试连接 mysql 数据库,但出现如下错误: HTTP 状态 500 - 内部服务器错误 类型异常报告 消息内部服务器错误 描述 服务器遇到一个内部错误,阻止它完成这个请求。 例外 javax.servlet.ServletException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: 用户''@'localhost'拒绝访问数据库'mysqluser=root'

根本原因

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:用户“@'localhost”拒绝访问数据库“mysqluser=root”

note GlassFish Server Open Source Edition 4.0 日志中提供了异常的完整堆栈跟踪及其根本原因。 GlassFish Server 开源版 4.0

我的 JSP 代码是:

`<%@ page import ="java.sql.*" %>

&lt;%<br>String fname = request.getParameter("fname");

`String lname = request.getParameter("lname");
`String email = request.getParameter("email");
`String user = request.getParameter("uname"); 
`String pwd = request.getParameter("pass");

Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql"+ "user=root"); Statement st = con.createStatement();

`int i = st.executeUpdate("insert into members(first_name, last_name,email, uname, pass) values ('" + fname + "','" + lname + "','" + email + "','" + user + "','" + pwd + "')");
`if (i > 0)
`{
 `out.print("Registration Successfull!"+"<ahref='index.jsp'>Go to Login</a>");
`} 
`else {
    `response.sendRedirect("index.jsp");

} %> `

我的数据库没有任何密码。 我通过以下步骤在 netbeans 中建立连接: 第 1 步:服务选项卡 第 2 步:右键单击数据库并选择新建连接... 第 3 步:按照步骤操作。 测试连接成功然后完成。 我正在使用 linux Fedora 20 操作系统

【问题讨论】:

  • 一个好的开始方法是将所有业务逻辑从 JSP(仅用于 UI 表示)移动到 servlet。下一部分,因为你有一个完整的堆栈跟踪(你没有显示)查看这可能有助于更多地了解这个问题。
  • 获取连接时不需要添加你的mysql数据库服务器的用户名和密码吗?
  • Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql"+ "user=root") 这是问题行;

标签: java mysql jsp


【解决方案1】:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql"+ "user=root"); 的说法是错误的,因为:

url"user=root" 的连接将产生字符串:jdbc:mysql://localhost:3306/mysqluser=root,这绝对是错误的。在 url 中,您缺少数据库名称(如果是 mysql,那么您在命名时遇到问题,我建议您更改数据库名称)。

解决方案:

分别为url、用户和密码定义变量(即使没有设置密码,您也必须将其提供为空字符串)。见以下代码:

String url="jdbc:mysql://localhost:3306/databaseName";
String user="root";
String password="";

Connection conn = DriverManager.getConnection(url, user, password);

希望对你有帮助。

附:在 jsp 中编写数据库逻辑是个坏主意。最好把其他类的db管理代码外化,用它来获取对应的连接。

附言不要忘记在使用完数据库资源后管理它们(我说的是关闭 Connection、PreparedStatement、ResultSet 的 finally 块)以释放使用的资源并避免内存泄漏。编写一个单独的方法来获取这些参数并检查它们是否为空是个好主意,如果条件为真,则相应的资源将被关闭。

【讨论】:

  • @sanketkaranjule 如果此答案已解决您的问题,请将此答案标记为已接受。谢谢。
【解决方案2】:

您缺少密码参数...即使您没有密码登录但使用空字符串添加它...如果您正在使用,请检查您是否将 mysql 库添加到 tomcat 或 glassfish

【讨论】:

  • 欢迎加入我知道你的仓库不允许发表评论。但是在进入 mske 时,一定要添加一些代码 sn-p 以便更好地理解提问者,因为看起来提问者对堆栈来说也很新
  • 好的,我下次会...提前坦克
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2011-03-30
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多