Как определить конкретные атрибуты имени из HTML-тега выбора в цикле while в JSP - PullRequest
0 голосов
/ 11 ноября 2009

iam извлекает данные из базы данных, используя цикл while, выполняя его в табличном формате, как вы можете видеть ниже, вместе со столбцом, в котором есть тег select, включенный в цикл while, теперь доступны варианты для тега select; (ожидающий и очищенный), который по выбору я хочу использовать для обновления соответствующей таблицы базы данных, но проблема в том, что, когда я нажимаю кнопку обновления, он обновляет все значения вместо конкретной выбранной справки selected.plz

HTML-код

<tr>
    <td width=50><div align="center"><%=datez%></div></td>
    <td width=50><div align="center"><%=cashrecid%></div></td>
    <td width=50><div align="center"><%=fname%></div></td>
    <td width=50><div align="center"><%=lname%></div></td>
    <td width=50><div align="center"><%=cashout%></div></td>
    <td width=50><div align="center"><%=purpose%></div></td>
    <td width=50><div align="center"><%=project%></div></td>
    <td width=50><div align="center">
        <select name="select" size="1" id="select">
            <option value="pending">pending</option>
            <option value="cleared">cleared</option>
        </select>
    </div></td>
  </tr>

JSP код

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%! public int cashrecid; %>

<%

String uname=(String)session.getAttribute("theName");
String status=request.getParameter("select");
Connection con1=DriverManager.getConnection("jdbc:odbc:pettyz","sa","pass@word");
PreparedStatement stmt1=con1.prepareStatement("select cashrecid from cashrequisitions where status='pending' ");
ResultSet rs1=stmt1.executeQuery();

while(rs1.next()) {
    cashrecid=rs1.getInt(1);
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con=DriverManager.getConnection("jdbc:odbc:pettyz","sa","pass@word");
    PreparedStatement stmt=con.prepareStatement("update cashrequisitions set status=? where cashrecid=?");
    stmt.setString(1,status);
    stmt.setInt(2,cashrecid);
    stmt.executeUpdate();
}

rs1.close();
stmt1.close();
con1.close();

%>

1 Ответ

1 голос
/ 11 ноября 2009

Я не понимаю актуальную проблему / требование.

Но, по крайней мере, я вижу следующее: Ваш первый SQL-запрос получает все кассовые реквизиты из БД, которые имеют статус "ожидание". Ваш второй запрос обновляет статус для всех из полученных денежных поступлений до выбранного значения. Таким образом, если вы выберете «в ожидании», фактически ничего не изменится Но если вы выберете «очищенный», фактически все будет установлено на «очищенный». У вас не останется ни одной строки со статусом «в ожидании». Далее переменная uname немного округлена.

Вам не нужен uname в вашем первом запросе? Какое функциональное требование в конце концов? Возможно, вы хотите изменить только статус для конкретного uname, который также является столбцом таблицы cashrequisitions? Если это так, вам нужно заменить оба SQL-запроса на:

preparedStatement = connection.prepareStatement("UPDATE cashrequisitions set status=? where uname=?");
preparedStatement.setString(1, status);
preparedStatement.setString(2, uname);

Этот запрос будет эффективно обновлять status всех кассовых заявок с указанным uname до указанного значения состояния. Если вам сложно работать с SQL (что выглядит так), я могу порекомендовать вам этот базовый учебник по SQL .

Тем не менее, ваш код немного .. э-э ... необычно . Обычно вы пишете код Java в классах Java, а не в файлах JSP. Игнорируйте те старомодные уроки 90-х. Использование скриптлетов крайне не рекомендуется. То, как вы пишете код JDBC, также далеко не эффективно и очень чувствительно к утечкам ресурсов. Чтобы получить представление о том, как правильно выполнять основные действия, вы можете найти эту статью полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...