2015-07-23 1 views
0

jdbcData.jsp это показывает результат целых строк и столбцов таблицы reg с ссылкой на действие удалить. Я хочу удалить только строка данных при нажатии на удалении ссылка. Что мне делать?Как удалить выбранные данные из базы данных с помощью jsp?

примечание: второй скрипт называется jdbcDelete.jsp.

jdbcData.jsp

<% 
    Statement st =null; 
    ResultSet rs =null; 
    String s1 = request.getParameter("fn"); 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root"); 

    st =con.createStatement(); 
    rs=st.executeQuery("select * from reg"); 
%> 
<table border="1" align="center" cellpadding="10dx" summary="all posts" > 

<tr> 
    <td><b>Id</b></td> 
    <td><b>First Name</b></td> 
    <td><b>Last Name</b></td> 
    <td><b>Action</b></td> 
</tr> 

<% 
    while(rs.next()) {   
     int a = rs.getInt("id"); 
     String b =rs.getString("fname"); 
     String c=rs.getString("lname"); 
%> 
<tr> 
    <td><%out.println(a);%></td> 
    <td><%out.println(b);%></td> 
    <td><%out.println(c);%></td> 
    <td><a href="jdbcDelete.jsp?id1=<%=a%>">Delete</a></td> 
</tr> 
<% 
    } 
%> 
</table> 
<% 
    st.close(); 
    con.close(); 
%> 

jdbcDelete.jsp

<% Integer dlt =(Integer)request.getAttribute("id1"); 
    ResultSet rs=null; 
    Statement st=null; 

    rs = st.executeQuery("delete from reg where id='"+dlt+"'"); 
    response.sendRedirect("jdbcData.jsp"); 
%> 
+0

Пожалуйста, переключитесь на использование '' PreparedStatement'' (http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html). Ваш 'DELETE' уязвим для SQL-инъекции; вся таблица будет стерта, когда кто-то перейдет в id ''OR 1 = 1 --'. –

+0

Привет, спасибо за предложение. Но я ученик. подготовленное заявление будет у нас в следующей лекции JDBC. Лекция сегодняшнего дня собиралась подключить jdbc с формой реестрации. но я хочу узнать больше, поэтому я решил сделать это и получил ошибку. Я буду очень благодарен, если кто-нибудь даст мне решение этого вопроса @mick Mnemonic –

ответ

2

Есть несколько причин, почему ваш код не работает.

  1. В jdbcDelete.jsp нет объекта соединения присутствует, так что вы должны установить соединение первого

    <% 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root"); 
        Statement st = con.createStatement(); 
    %> 
    
  2. Вы используете request.getAttribute("id1");, чтобы получить ID и вы не установили какой-либо атрибут в странице jdbcData.jsp, поэтому вы получите null. Вместо этого вы должны использовать request.getParameter("id1");, request.getParameter("id1"); всегда возвращает String, поэтому вам нужно разобрать String на int. Для этого

    int dlt = Integer.parseInt(request.getParameter("id1")); 
    
  3. Вы выполняете executeQuery, который возвращает ResultSet.

Выполняет заданную инструкцию SQL, которая возвращает один объект ResultSet .

Здесь вам нужно использовать executeUpdate, который используется для выполнения DML команды, как INSERT, UPDATE AND DELETE и возвращает int.

int i = st.executeUpdate("delete from student where studentid="+dlt); 

Итак, наконец, вы jdbcDelete.JSP выглядит следующим образом:

<%@ page import="java.sql.*" %> 
<% 
    int dlt = Integer.parseInt(request.getParameter("id1")); 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root"); 

    Statement st = con.createStatement();; 

    int i = st.executeUpdate("delete from student where studentid="+dlt); 
    if (i != 0) { 
     response.sendRedirect("jdbcData.jsp"); 
    } else { 
     out.print("Data not deleted successfully"); 
    } 
%> 

Предложение: Это плохая практика, чтобы использовать код Java в JSP вместо этого использовать servlets, а также использовать preparedstatement, но, как вы изучаете временем вы научитесь.

Надеюсь, это поможет.

+0

благодарит много брата. я тоже хочу делать все идеально, но чтобы стать номером 1, между ними есть 99 человек, чтобы избить, так что я стараюсь изо всех сил подойти как можно скорее, со всеми хорошими знаниями, такими же, как и ваши. Еще раз для этого. Абсолютно работает. Мне жаль, что у меня не может быть такого друга, чтобы я мог учиться довольно быстро. –

+0

Добро пожаловать. – Naman

0

Вы можете переписать свой код, как это,

<% Integer dlt =(Integer)request.getAttribute("id1"); 
ResultSet rs=null; 
Statement st=null; 

PreparedStatement ps=con.prepareStatement("delete from reg where id=?") 
ps.setInt(1,dlt); 
ps.executeUpdate(); 

response.sendRedirect("jdbcData.jsp"); 
%> 

NB: -Для работы с базой данных вы можете написать услуги или DAO И, пожалуйста, пройти через MVC архитектуры