Моя ошибка JDBC вызвана моим запросом SQL? - PullRequest
2 голосов
/ 31 марта 2012

В настоящее время я пишу приложение JDBC для управления базой данных MySQL. У меня есть методы удаления, вставки и выбора, работающие с правильными запросами. У меня проблемы с методом обновления. При использовании следующего кода я получаю ошибку MySQL:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать рядом с "", Street ", Town", City ", PostCode", Age ", email", RunningFee'false'Where PID = "в строке 1. ..

private void updateData()
{
    Connection con;
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(
                "jdbc:mysql://localhost/snr","root","");

        String sql = "Update participant Set password='"+txtpassword.getText()+"'," +
                "lastName='"+txtlastName.getText()+"',firstName='"+
                txtfirstName.getText()+"',HouseNumber'"+txtHouseNumber.getText()+"',Street'"+txtStreet.getText()+"',Town'"+txtTown.getText()+"',City'"+txtCity.getText()+"',PostCode'"+txtPostCode.getText()+"',Age'"+txtAge.getText()+"',email'"+txtemail.getText()+"',RunningFee'"+cbRunningFee.isSelected()+"' Where PID='"+txtPID.getText()+"'";

        Statement statement = con.createStatement();

        statement.execute(sql);

        createMessageBox("Updated Successfully");

        clearControls();
    }
    catch(Exception e)
    {
        createMessageBox(e.getMessage());
    }
}

Что-то не так с моим запросом SQL?

Ответы [ 5 ]

4 голосов
/ 31 марта 2012

Да, ваш запрос неверный. Вы пропускаете = в огромной группе set пар столбец / значение.

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

2 голосов
/ 31 марта 2012

Да, с запросом что-то не так.Ваш способ построения запроса уязвим для SQL-инъекций.Используйте параметризованные запросы вместо конкатенации такого текста.

Прочитайте эту статью: Предотвращение внедрения SQL в Java

2 голосов
/ 31 марта 2012

Мало того, что ваш запрос неверен, но он также может открыть вас для Атаки SQL Interjection .

Вам нужно параметризировать ваш запрос, заменив вставленныйв значениях с вопросительными знаками, подготовка заявления и его выполнение.См. Учебник, на который я ссылаюсь.

Наконец, сохранение пароля в виде простого текста - очень и очень плохая идея.

String sql = "UPDATE participant SET "+
    "password=?, lastName=?, firstName=?, HouseNumber=?, Street=?, Town=?, "+
    "City=?,PostCode?,Age=?,email=?,RunningFee=? "+
    "WHERE PID=?";
PreparedStatement upd = con.prepareStatement(sql);
upd.setString(1, txtpassword.getText());
upd.setString(2, txtlastName.getText());
// ... and so on
upd.executeUpdate();
con.commit();
1 голос
/ 31 марта 2012

Ошибка «у вас есть ошибка в вашем синтаксисе SQL» с сервера SQL и указывает, что да, у вас есть ошибка в вашем запросе. В этих случаях я часто нахожу полезным напечатать сам построенный запрос, просто чтобы убедиться, что он строится правильно.

В вашем случае, я полагаю, проблема в том, что вы упускаете кучу "=", вам также, вероятно, нужно экранировать одинарные кавычки в Java, чтобы они правильно проходили (замените 'на \').

1 голос
/ 31 марта 2012

Вы забыли некоторые = в своем запросе.

Попробуйте

String sql = "Update participant Set password='"+txtpassword.getText()+"'," +
            "lastName='"+txtlastName.getText()+"',firstName='"+ 
txtfirstName.getText()+"',HouseNumber='"+txtHouseNumber.getText()+"',Street='"+
txtStreet.getText()+"',Town='"+txtTown.getText()+"',City='"+txtCity.getText()+
"',PostCode='"+txtPostCode.getText()+"',Age='"+txtAge.getText()+"',email='"+
txtemail.getText()+"',RunningFee='"+cbRunningFee.isSelected()+
"' Where PID='"+txtPID.getText()+"'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...