2012-10-10 65 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查詢爲您授予訪問數據庫的權限(如果您要從遠程客戶端訪問數據庫)。