Поиск данных в базе данных с использованием JSP

#java #jsp

#java #jsp

Вопрос:

В чем проблема со следующим кодом? Я хочу выполнить поиск данных в базе данных, используя следующий код JSP.

search.jsp

 <%@ page import="java.sql.*" %>
<html>
<form>
<table>
<%
String value=request.getParameter("id");
int v=Integer.parseInt(value);
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/employee ","root", "root");
Statement st=conn.createStatement();
ResultSet rs = st.executeQuery("select * from test where id=" v "");
if(rs.next()){ 
    %>
<tr><td>Name: </td><td<input type="text" value="<%=rs.getString("name")%>" > </td></tr>
<tr><td>Address: </td><td<input type="text" value="<%=rs.getString("address")%>" > </td></tr>
<tr><td>Contact No: </td><td<input type="text" value="<%=rs.getInt("contactNo")%>" > </td></tr>
<tr><td>Email: </td><td<input type="text" value="<%=rs.getString("email")%>" > </td></tr>
      <%
}
%>
</table>
</form>
</html>
  

Комментарии:

1. Полученное вами исключение сообщает вам, что

2. 14: Class.forName(«com.mysql.jdbc.Driver»). newInstance(); в этой строке отображается ошибка. Пожалуйста, объясните, что я новичок в jsp. Спасибо

3. Кстати, после этого есть пробел employee , и вы не вызываете `rs.close (); conn.close ();` ни обработку исключений. Сначала запустите код в IDE как крошечное java-приложение.

4. @user274910 возможная причина отсутствия драйвера mysql jdbc в вашем пути к классу, убедитесь, что вы добавили этот драйвер в свой проект.

5. @user274910 и если у вас есть драйвер JDBC на вашем пути, он вам больше не нужен Class.forName("com.mysql.jdbc.Driver"); . Это пережиток старой версии Java.

Ответ №1:

измените запрос выбора ваш запрос неверен попробуйте:

 "select * from test where id='" v "'"
  

Один простой пример :

 <%
  String value=request.getParameter("student_id");;
  int v=Integer.parseInt(value);
  Class.forName("com.mysql.jdbc.Driver");
  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root", "welcome");
  Statement st=conn.createStatement();
  ResultSet rs = st.executeQuery("select * from student where student_id='" v "'");
  if(rs.next()){
      %>
  <tr><td>Name: </td><td><input type="text" value="<%=rs.getString("student_name")%>"/> </td></tr>
        <%
  }
  %>
  

Комментарии:

1. Спасибо, мне это удалось

2. если это сработало, пожалуйста, примите это как свой ответ, нажав на знак стрелки в левой части ответа, и вы можете проголосовать за него. Спасибо

Ответ №2:

Я никогда не предлагаю вам использовать Scriplet в JSP, вместо этого используйте стандартную библиотеку тегов JavaServer Pages, которая более проста в использовании и менее подвержена ошибкам.

Вы можете достичь этого с помощью библиотеки тегов JSTL SQL.

Используйте тег JSTL Core c: forEach, c: forTokens, который является хорошей альтернативой встраиванию Java for , while , или do-while loop с помощью скриптлета.


Пример кода: (измените его в соответствии с вашими потребностями)

 <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<sql:query dataSource="${dataSource}"
    sql="select name,address,contactNo,email from test where id=?" var="result">
    <sql:param value="${param.id}"></sql:param>
</sql:query>

<table border="1">
    <c:forEach var="row" items="${result.rows}">
        <tr>
            <td><input type="text" value="${row.name}"/></td>
            <td><input type="text" value="${row.address}"/></td>
            <td><input type="text" value="${row.contactNo}"/></td>
            <td><input type="text" value="${row.email}"/></td>
        </tr>
    </c:forEach>
</table>
  

Найдите полный пример кода здесь, в теге JSTL SQL.

Ответ №3:

1—> Connection conn = DriverManager.getConnection(«jdbc: mysql:// localhost:3306/employee», «root», «root»);

в вашем коде после имени базы данных есть пробел

2 —> Имя: » > Адрес: » > Контактный номер: » > Электронная почта: » >

проверьте свое имя:

я думаю, что цикл while лучше, чем если бы в этом случае