Ошибка в параметризованом запросе

350
07 марта 2018, 07:15
connection.updateQuery("test_1", id, "UPDATE ? SET question = ?,var1=?,var2=?,var3=?,var4=?,var5=?,var6=?,con1=?,con2=?,con3=?,con4=?,con5=?,con6=?,vidp1=?,vidp2=?,vidp3=?,vidp4=?,ans=?,url_image=? WHERE id = ?", textArea1.getText(), textField1.getText(), textField2.getText(), textField3.getText(), textField4.getText(), textField5.getText(), textField6.getText(), comboBox1.getSelectedItem().toString(), comboBox2.getSelectedItem().toString(), comboBox3.getSelectedItem().toString(), comboBox4.getSelectedItem().toString(), comboBox5.getSelectedItem().toString(), comboBox6.getSelectedItem().toString(), null, null, null, null, ans_(), url_image);


 public void updateQuery(String name,int id,String query,String text, String var1,String var2,String var3,String var4,String var5,String var6,String con1,String con2,String con3,String con4,String con5,String con6,String vidp1, String vidp2,String vidp3,String vidp4,String ans, String url_image){
        try {
            preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1,name);
            preparedStatement.setString(2,text);
            preparedStatement.setString(3,var1);
            preparedStatement.setString(4,var2);
            preparedStatement.setString(5,var3);
            preparedStatement.setString(6,var4);
            preparedStatement.setString(7,var5);
            preparedStatement.setString(8,var6);
            preparedStatement.setString(9,con1);
            preparedStatement.setString(10,con2);
            preparedStatement.setString(11,con3);
            preparedStatement.setString(12,con4);
            preparedStatement.setString(13,con5);
            preparedStatement.setString(14,con6);
            preparedStatement.setString(15,vidp1);
            preparedStatement.setString(16,vidp2);
            preparedStatement.setString(17,vidp3);
            preparedStatement.setString(18,vidp4);
            preparedStatement.setString(19,ans);
            preparedStatement.setString(20,url_image);
            preparedStatement.setInt(21,id);
            preparedStatement.executeUpdate(); //ошибка
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test_1' SET question = 'swrweqe\n2e1;[12elp[p3rl\nda0123021\n3dfwadad',var1='aw' at line 1

как исправить помогите?

Answer 1

Имя таблицы нельзя передавать в виде параметров. Параметрами можно передавать только значения полей

Answer 2

Пара предложений:
1. Формируйте запрос с подстановкой таблицы до этого метода
2. Переработайте данный метод, чтоб убрать +100500 параметров.
Как вариант, оберните передаваемые параметры в отдельный класс и назовите его НужныйВамЗапросQueryContainer.

    connection.updateQuery(
            "UPDATE test_1 SET question = ?,var1=?,var2=?,var3=?,var4=?,var5=?,var6=?,con1=?,con2=?,con3=?,con4=?,con5=?,con6=?,vidp1=?,vidp2=?,vidp3=?,vidp4=?,ans=?,url_image=? WHERE id = ?",
            id,
            textArea1.getText(),textField1.getText(),textField2.getText(),textField3.getText(),textField4.getText(),textField5.getText(),textField6.getText(),comboBox1.getSelectedItem().toString(),comboBox2.getSelectedItem().toString(),comboBox3.getSelectedItem().toString(),comboBox4.getSelectedItem().toString(),comboBox5.getSelectedItem().toString(),comboBox6.getSelectedItem().toString(),null,null,null,null,ans_(),url_image);

    public void updateQuery(
            String query,
            int id,
            String var1,String var2,String var3,String var4,String var5,String var6,String con1,String con2,String con3,String con4,String con5,String con6,String vidp1,String vidp2,String vidp3,String vidp4,String ans,String url_image){
            try{
            preparedStatement=connection.prepareStatement(query);
            preparedStatement.setString(1,text);
            preparedStatement.setString(2,var1);
            preparedStatement.setString(3,var2);
            preparedStatement.setString(4,var3);
            preparedStatement.setString(5,var4);
            preparedStatement.setString(6,var5);
            preparedStatement.setString(7,var6);
            preparedStatement.setString(8,con1);
            preparedStatement.setString(9,con2);
            preparedStatement.setString(10,con3);
            preparedStatement.setString(11,con4);
            preparedStatement.setString(12,con5);
            preparedStatement.setString(13,con6);
            preparedStatement.setString(14,vidp1);
            preparedStatement.setString(15,vidp2);
            preparedStatement.setString(16,vidp3);
            preparedStatement.setString(17,vidp4);
            preparedStatement.setString(18,ans);
            preparedStatement.setString(19,url_image);
            preparedStatement.setInt(20,id);
            preparedStatement.executeUpdate(); //ошибка
            }catch(SQLException e){
            e.printStackTrace();
            }
            }
READ ALSO
Не создается java поток на ubuntu 16.04

Не создается java поток на ubuntu 16.04

Когда тестирую свою программу на компьютере поток создается без проблем и программа работает корректно, но если я запускаю тот жеjar файл...

302
Рефакторинг длины метода

Рефакторинг длины метода

Как можно сократить такой вот метод

279
Последовательный Animator Android Studio

Последовательный Animator Android Studio

В разработке под android новичок, имеется ImageView, в который подгружается новая фотография при кликеХочу, чтобы ImageView сначала исчезал, затем подгружалась...

281
SQL-запрос на обновление данных

SQL-запрос на обновление данных

В таблице четыре колонки id, name, description и priceМне надо создать метод void changeDescription() который удаляет последнее предложение из description всех продуктов...

349