2012-10-10 59 views
0

我试图在我的eclipse中使用tomcat服务器运行简单的servlet/mysql webapp。 当我尝试从servlet连接到database,我收到以下错误:尝试从myeclipse中的servlet连接到mysql时访问被拒绝

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create 
PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES)) 
下面

是我执行的脚本:

该servlet:

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

import javax.annotation.Resource; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.sql.DataSource; 

public class EmployeeServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    @Resource(name = "jdbc/testDB") 
    DataSource ds; 

    public EmployeeServlet() { 
    super(); 
    } 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    try { 
     Connection con = ds.getConnection(); 

     Statement stmt = con.createStatement(); 
     String query = "select * from Employee"; 
     ResultSet rs = stmt.executeQuery(query); 

     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     out.print("<center><h1>Employee Details</h1></center>"); 
     out.print("<html><body>"); 
     out.print("<table border=\"1\" cellspacing=10 cellpadding=5>"); 
     out.print("<tr><th>Employee ID</th>"); 
     out.print("<th>Employee Name</th>"); 
     out.print("<th>Salary</th>"); 
     out.print("<th>Department</th></tr>"); 

     while (rs.next()) { 
     out.print("<tr>"); 
     out.print("<td>" + rs.getInt("emp_id") + "</td>"); 
     out.print("<td>" + rs.getString("emp_name") + "</td>"); 
     out.print("<td>" + rs.getDouble("salary") + "</td>"); 
     out.print("<td>" + rs.getString("dept_name") + "</td>"); 
     out.print("</tr>"); 
     } 
     out.print("</table></body></html>"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    } 

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

内容context.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<Context crossContext="true"> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/testDB" auth="Container" 
    type="javax.sql.DataSource" 
    maxActive="100" maxIdle="30" maxWait="10000" 
    username="root" password="root" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost/mysql"> 
</Context> 
+0

你有没有设置你的用户名和密码的MySQL? – Abubakkar

+0

如果你从localhost执行'mysql -u root -proot',你会得到一个错误吗? – cherouvim

+1

大多数MySQL DB拒绝所有不是来自同一台机器的传入连接。你可以改变这个,但这需要完全访问数据库,因为我的共享服务器上没有这个服务器,并且不知道如何改变它,因为我知道我不能提前。 – 11684

回答

0

似乎在URL中缺少端口号:

jdbc:mysql://localhost:<port>/mysql 
1

尝试连接到MySQL从任何其他工具/从命令提示符与你在你的代码用于连接到相同的所有信息。尝试在连接网址中包含端口。默认端口是3306

1

使用mysql的GRANT查询为您授予访问数据库的权限(如果您要从远程客户端访问数据库)。