簡體   English   中英

從servlet連接到mysql數據庫

[英]Connect to mysql database from servlet

我正在嘗試連接到數據庫以檢查用戶名和密碼。 我正在學習教程,但我的連接無法正常工作。 我的問題在以下幾行:

String url = "jdbc:mysql://localhost:3306/"; 
String dbName = "LoginExample";
String driver = "com.mysql.jdbc.Driver";  
String userName = "root";  
String password = "password"; 

所有這些值的含義是什么? 這些標准嗎? 如果沒有,我該如何找到與我的數據庫相對應的數據庫。 同樣,在創建數據庫時,也沒有要求我輸入用戶名和密碼。

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

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    public static boolean validate(String name, String pass) {
        boolean status = false;
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        String url = "jdbc:mysql://localhost:3306/"; 
        String dbName = "LoginExample";
        String driver = "com.mysql.jdbc.Driver";  
        String userName = "root";  
        String password = ""; 

        try {  
            Class.forName(driver).newInstance();  
            conn = DriverManager  
                    .getConnection(url + dbName, userName, password);  

            pst = conn  
                    .prepareStatement("select * from Users where username=? and password=?");  
            pst.setString(1, name);  
            pst.setString(2, pass);  

            rs = pst.executeQuery();  
            status = rs.next();  

        } catch (Exception e) {  
            System.out.println(e);  
        } finally {  
            if (conn != null) {  
                try {  
                    conn.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (pst != null) {  
                try {  
                    pst.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (rs != null) {  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
        }
        return status;
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String un = request.getParameter("username");
        String pw = request.getParameter("password");

        response.setContentType("text/html");    
        PrintWriter out = response.getWriter();  

        HttpSession session = request.getSession(false);
        if (session != null) {
            session.setAttribute("name", un);
        }

        if (validate(un,pw)) {
            RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");    
            rd.forward(request,response); 
        } else {
            out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
        }
    }

}

錯誤日志:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection refused: connect

STACKTRACE:

java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at servlets.Login.validate(Login.java:55)
    at servlets.Login.doPost(Login.java:112)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)


** END NESTED EXCEPTION **

網址告訴程序在哪里以及如何查找數據庫。 在這種情況下,您將使用JDBC訪問在您自己的計算機( localhost )上運行的MySQL數據庫。

dbname是數據庫的名稱。 MySQL服務器可能托管多個數據庫,因此您需要指定所需的數據庫。

驅動程序是將用於訪問數據庫的Java類。

用戶名和密碼說明自己。

假設url中的端口和數據庫名稱正確,則您的問題很可能是用戶名/密碼組合。 默認情況下,用戶名是“ root”,密碼是空的。

是的,所有這些都是標准的,您必須使用它通過java連接到數據庫。

    //since you have to connect to database you have to connect through to database server with url(where localhost signifies your current system and 3306 is a port)
    String url = "jdbc:mysql://localhost:3306/"; 

    //In order to connect to specific database specify its name
    String dbName = "LoginExample";

    //Initialize a driver so you can open a communications channel with the database.
    String driver = "com.mysql.jdbc.Driver"; 

    //credentials required to connect 
    String userName = "root";  
    String password = "password"

由於您在安裝過程中輸入了任何用戶名和密碼,因此設置了默認名稱和密碼。默認用戶名是root ,密碼是no password。您還可以重設密碼

com.mysql.jdbc.CommunicationsException:由於基礎異常導致通信鏈接失敗:

首先,您不需要實例化驅動程序,只需調用它的靜態初始化(例如,通過調用Class.forName),即可在DriverManager中注冊它。

因此,從Class.forName(driver).newInstance()刪除.newInstance() Class.forName(driver).newInstance()

還要檢查端口3306是否被其他進程獲取

運行 resmon.exe並轉到“網絡”選項卡,以檢查3306端口是否被其他進程獲取。

資源監控器

您不應該手動嘗試從servlet建立數據庫連接。 相反,您應該定義一個DataSource並從servlet中查找它。

Tomcat逐步指南:

  1. 將您的mysql驅動程序放入tomcat的/lib文件夾中
  2. 在Tomcat的context.xml定義數據源

     < Resource name="jdbc/DefaultDB" type="javax.sql.DataSource" auth="Container" description="Default datasource" maxActive="100" maxIdle="30" maxWait="10000" username="" password="" driverClassName="com.mysql.jdbc.Driver" url="com.mysql.jdbc.Driver"/> 
  3. 在您的web.xml引用此數據源

     < resource-ref> < res-ref-name>jdbc/DefaultDB</res-ref-name> < res-type>javax.sql.DataSource</res-type> < res-auth>Container</res-auth> < /resource-ref > 
  4. 查找數據源:

    InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/DefaultDB");

    或者,您可以注入數據源:

    @Resource(name="jdbc/DefaultDB") private javax.sql.DataSource ds;

  5. 獲取連接:

Connection connection = ds.getConnection();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM