为啥我在使用 JDBC 和 MySQL 的 JSP 中出现连接失败错误
Posted
技术标签:
【中文标题】为啥我在使用 JDBC 和 MySQL 的 JSP 中出现连接失败错误【英文标题】:Why am I getting a connection failed error in JSP wit JDBC and MySQL为什么我在使用 JDBC 和 MySQL 的 JSP 中出现连接失败错误 【发布时间】:2019-12-02 16:11:31 【问题描述】:我正在尝试连接到 mysql 数据库并执行查询
但加载时数据库连接失败。
密码和用户ID都正确。
我在 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>
这是我得到的输出:
实时股票报价 搜索:
在这里搜索
连接的数据库
SELECT * FROM stocks
WHERE name
LIKE '%qry%'
错误!数据库连接失败!!
为什么会连接然后失败?
【问题讨论】:
好的,所以我从 e.getMessage() 收到了一条打印消息。它说对空结果集进行了非法操作。这是有道理的。我认为查询正在执行而无需我按下按钮。 【参考方案1】:异常包含 4 个有用的信息:堆栈跟踪、消息、类型和原因。
你扔掉了所有 4 件事,并用“失败!”替换它。
“不要那样做”的经典案例。
让异常发生;然后,您的日志将包含所有这些信息供您查看。从那里您可能会找出问题所在。
如果没有这些信息,没有你的开发机器的完整克隆,没有人可以在这里提供帮助。
【讨论】:
那么如何获取eception消息和stacktrace 我收到错误信息,对空结果集的非法操作 @Vinnie 不,不要那样做。然后你仍然扔掉 4 样东西中的 3 样!永远不要那样做! @jshariar 只是不要抓住它,然后日志将显示所有信息。如果不允许,请在方法签名中添加“throws”子句。如果这也不允许,您的最终后备是throw new RuntimeException(e)
;这总是被允许的。【参考方案2】:
使用 try-with-resource 自动关闭 Connection、(Prepared)Statement 和 ResultSet。它的语法有点奇怪:try(DECLARATIONS) ....
。它的优点是它还关闭异常和返回/中断等。
那么q
参数一定要填写。
Always use a PreparedStatement:SQL 注入。
让例外尽显其荣耀。
` 是在 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>
<%
%>
【讨论】:
以上是关于为啥我在使用 JDBC 和 MySQL 的 JSP 中出现连接失败错误的主要内容,如果未能解决你的问题,请参考以下文章
Class.forName(“com.mysql.jdbc.Driver”)错误jsp [重复]
Class.forName(“com.mysql.jdbc.Driver”)错误jsp [重复]