有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我在JSP和JDBC和MySQL中遇到连接失败错误

我正在尝试连接到mysql数据库并执行查询

但是数据库连接在负载时失败

Pass和userID都是正确的

我在netbeans上没有任何错误

这是我的密码

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>

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

<% Class.forName("com.mysql.jdbc.Driver"); %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Real Time Stock Price Quote</h1>

        <form action="" method="get">

            <p>Search:</p> 
            <input type="text" name="q" placeholder='search here'><br>
            <input type="submit" value="Submit" ><br>

        </form>

        <%
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

            try{
                Class.forName("com.mysql.jdbc.Driver");
                conn = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/stocklist","root","");
                st = conn.createStatement();

                String qry = request.getParameter("q");

                String data;


                qry= "SELECT * FROM `stocks` WHERE `name` LIKE '%qry%'";


                rs = st.executeQuery(qry);


                 if(!conn.isClosed()){
                     %>

                     <P>connected DB  </P>
                     <%= qry %> 

                     <%
                 }

                %>

                <p> <% rs.getString("symbol"); %> </p>

                <%
            }catch(Exception e){

                    %>
                    <h2>Error! Database Connection Failed!!</h2>

                    <%

                    }

                    %>
    </body>
</html>


以下是我得到的输出:

实时股票报价 搜索:

在这里搜索

连通数据库

stocks中选择*其中name类似于“%qry%” 错误数据库连接失败

为什么它会连接然后失败


共 (2) 个答案

  1. # 1 楼答案

    异常中有4个有用的信息位:堆栈跟踪、消息、类型和原因

    你把4件东西都扔掉了,换成“失败!”

    “不要那样做”的经典案例

    让例外发生;您的日志将包含所有这些信息供您查看。从那里你可能会找出问题所在

    如果没有这些信息,没有开发人员机器的完整克隆,没有人能在这里提供帮助

  2. # 2 楼答案

    使用try with资源自动关闭连接、(准备好的)语句和结果集。它的语法有点奇怪:try(DECLARATIONS) {....}。它的优点是它还可以关闭异常和返回/中断等

    然后必须填写q参数

    Always use a PreparedStatement:SQL注入

    让例外在它所有的荣耀中显现出来

    `<;%=1+2%>;是在HTML中插入一个表达式

    您的错误可能是表中没有类似“qry”的内容,并且没有调用rs.next()读取第一条/下一条记录

        <%
            String q = request.getParameter("q");
            String sql = "SELECT * FROM `stocks` WHERE `name` LIKE ?";
    
            try (Connection conn = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/stocklist", "root", "");
                    PreparedStatement st = conn.prepareStatement(sql)) {
                st.setString(1, "%" + q + "%");
    
                try (ResultSet rs = st.executeQuery()) {
                    while (rs.next()) {
                        %>
                        <p> <%= rs.getString("symbol") %> </p>
                        <%
                    }
                }
            }
    
         %>