getString из ResultSet с пробелами

Я управляю базой данных JDBC с помощью сервлетов /JSP, и один из атрибутов, которые у меня есть в таблице, - это строка, которая может содержать или не содержать пробелы между словами. У меня есть один JSP для отображения всей информации и еще один для редактирования, на обоих я выполняю getString к ResultSet и когда я просто отображаю его, он работает нормально, но при редактировании JSP он только "захватывает" первое слово до того, как пробел и остальная часть строки исчезают. Вот часть кода:

PerfilUsuarioConectado.jsp (тот, который я использую для отображения данных)

<%
    Connection conexion = DriverManager.getConnection("jdbc:odbc:gasteizcar", "", "");
    Statement set = conexion.createStatement();
    ResultSet rs = set.executeQuery("SELECT * FROM Usuario WHERE correoElectronico ='" + session.getAttribute("username") + "'");
    rs.next();
%>
<div id="principal">
    <table border="1" align="center">
        <tr>
            <td> Nombre: </td>
            <td> <%= rs.getString("nombre")%>
        </tr>
        <tr>
            <td> Apellidos: </td>
            <td> <%= rs.getString("apellidos")%>
        </tr>
        <tr>
            <td> E-mail: </td>
            <td> <%= rs.getString("correoElectronico")%>
        </tr>
        <tr>
            <td> Alias: </td>
            <td> <%= rs.getString("alias")%>
        </tr>
        <tr>
            <td> Nº móvil: </td>
            <td> <%= rs.getString("movil")%>
        </tr>
        <tr>
            <td> Coche: </td>
            <td> <%= rs.getString("marca") + " " + rs.getString("modelo") + " " + rs.getString("color")%>
        </tr>
    </table>
</div>

ModificarDatos.jsp (тот, который редактирует данные)

<%
    Connection conexion = DriverManager.getConnection("jdbc:odbc:gasteizcar", "", "");
    Statement set = conexion.createStatement();
    ResultSet rs = set.executeQuery("SELECT * FROM Usuario WHERE correoElectronico ='"
            + session.getAttribute("username") + "'");
    int i = 0;
    rs.next();
    String marca = rs.getString("marca");
    String modelo = rs.getString("modelo");
    String color = rs.getString("color");
    String movil = rs.getString("movil");
%>
<div id="principal">
    <form id="datos" action="ModificarDatos" method="post">
        <table border="1" align="center">
            <tr>
                <td> * Verificar con contraseña: </td>
                <td> <input pattern="[a-zA-Z0-9 ]{3,12}" type="password" id="password" name="password" required></td>
            </tr>
            <tr>
                <td> ** Nueva contraseña: </td>
                <td> <input pattern="[a-zA-Z0-9 ]{3,12}" type="password" id="nuevaContrasenia" name="nuevaContrasenia"> </td>
            </tr>
            <tr>
                <td> ** Repita la contraseña: </td>
                <td> <input pattern="[a-zA-Z0-9 ]{3,12}" type="password" id="repContrasenia" name="repContrasenia"> </td>
            </tr>
            <tr>
                <td> * Nº de móvil: </td>
                <td> <input pattern="[0-9]{9}" type="text" name="movil" id="movil" required value=<%= movil%>> </td>
            </tr>
            <tr>
                <td> *** Marca del coche: </td>
                <td> <input type="text" name="marca" id="marca" value=<%= marca%>> </td>
            </tr>
            <tr>
                <td> *** Modelo del coche: </td>
                <td> <input type="text" name="modelo" id="modelo" value=<%= modelo%>> </td>
            </tr>
            <tr>
                <td> *** Color: </td>
                <td> <input type="text" name="color" id="color" value=<%= color%>> </td>
            </tr>
        </table>
</div>
<input type="button" id="bActualizar" value="Actualizar datos">

Итак, если кто-нибудь может сказать мне, почему getString метод работает по-разному в обеих ситуациях, я был бы очень благодарен.

2 ответа

Решение

Ошибка в этих строках:

<input pattern="[0-9]{9}" type="text" name="movil" id="movil" required value=<%= movil%>>

Если ваша переменная movil содержит abc defскажем, сгенерированный HTML будет таким:

<input pattern="[0-9]{9}" type="text" name="movil" id="movil" required value=abc def>

Это затем устанавливает значение ввода в abc и создает другой атрибут def, который не распознается и будет игнорироваться. Фактически, выделение синтаксиса Markdown в переполнении стека указывает на это: abc синий, для значения, и def красный, для имени атрибута.

По крайней мере, вы должны поместить цитаты вокруг <%= movil %>:

<input pattern="[0-9]{9}" type="text" name="movil" id="movil" required value="<%= movil%>">

Если movil содержит abc defна этот раз вывод будет

<input pattern="[0-9]{9}" type="text" name="movil" id="movil" required value="abc def">

Теперь вы можете видеть, что значение было написано правильно.


Помимо этого, есть еще пара комментариев, которые я хотел бы сделать:

  • Во-первых, ваш код уязвим для внедрения SQL. Если твой username переменная сеанса заканчивается как что-то вроде test' OR 1=1 --все результаты из базы данных будут возвращены. Еще хуже, если это что-то вроде test'; DROP TABLE Usuario;--Вы можете потерять данные. Вместо этого используйте PreparedStatements.

  • Во-вторых, как отметил Аникет в комментарии, вам действительно не следует использовать скриптлеты. <% ... %> в JSP больше нет. Вместо этого вы должны использовать теги JSTL и выражения EL. Вопрос, связанный с Аникетом, - хорошее место для начала.

Я ценю, что это может быть вашим первым приложением JSP. Однако после того, как вы все заработаете, я бы порекомендовал вам рассмотреть возможность внесения этих изменений.

Цель метода getString () в классе ResultSet - вернуть данные из столбца, который вы указали как String. Это может принять два аргумента

Строка getString(String columnLabel) выбрасывает SQLException

Строка getString(String columnIndex) выбрасывает SQLException

Первый - это итерация ResultSet с использованием столбца для ex, как вы указали

String marca = rs.getString("marca");

второй может быть таким

String marca = rs.getString(1);

Также полностью повторяйте набор результатов до rs.next чтобы получить все значения из таблицы. Подробнее здесь

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

Другие вопросы по тегам