我正在尝试从数据库中获取记录。但我正面临拒绝访问的问题。我尝试了在堆栈溢出中提到的其他解决方案,例如向用户授予特权。
访问数据库的代码:
public void service(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>Servlet JDBC</title></head>"); out.println("<body>"); out.println("<h1>Servlet JDBC</h1>"); out.println("</body></html>"); // connecting to database Connection con = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/employees","root","root"); stmt = con.createStatement(); rs = stmt.executeQuery("SELECT * FROM employee"); // displaying records while(rs.next()){ out.print(rs.getObject(1).toString()); out.print("\t\t\t"); out.print(rs.getObject(2).toString()); out.print("<br>"); } } catch (SQLException e) { throw new ServletException("Servlet Could not display records.", e); } catch (ClassNotFoundException e) { throw new ServletException("JDBC Driver not found.", e); } finally { try { if(rs != null) { rs.close(); rs = null; } if(stmt != null) { stmt.close(); stmt = null; } if(con != null) { con.close(); con = null; } } catch (SQLException e) {} } out.close(); }
错误的堆栈跟踪:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:927) com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4686) com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1304) com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483) com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516) com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301) com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) java.lang.reflect.Constructor.newInstance(Unknown Source) com.mysql.jdbc.Util.handleNewInstance(Util.java:411) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) java.sql.DriverManager.getConnection(Unknown Source) java.sql.DriverManager.getConnection(Unknown Source) WebAppAss.DatabaseAccess.service(DatabaseAccess.java:36) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
在这种情况下可能是什么问题。我尝试创建一个新的数据库,但是也没有用。
问题是授予information.schema表根用户的权限。’root’@’%’没有任何权限。.就像我以前127.0.0.1用作连接地址一样,因此它给出了拒绝访问错误.. %是IP地址的通配符。所以mysql认为root@127.0.0.1是其他任何IP地址,但不是localhost。因此,只授予它权限就解决了我的问题。尝试使用Mysql客户端(如SQLYogetc)。授予权限以及与用户查看权限很容易。
information.schema
127.0.0.1
%
root@127.0.0.1
localhost
SQLYog