Как решить "ORA-00933 & ORA-00936" в SQL / Oracle? - PullRequest
0 голосов
/ 23 января 2019

Я создаю профиль ученика для нашего проекта в школе, и я впервые делаю это.

Это мой запрос для моей jTable (по щелчку мыши), которую я создал в netbeans

        int row = jTable1.getSelectedRow();
        String tc = jTable1.getModel().getValueAt(row, 0).toString();
        try {
            String query ="select * from CAREPOINT_STUDENT where NAME="+tc+" ";
            pst= (OraclePreparedStatement) ungabelio1.prepareStatement(query);
            rs = (OracleResultSet) pst.executeQuery();

            if(rs.next()){

                String NAME_ID = rs.getString("NAME");
                String AGE_ID = rs.getString("AGE");
                String ADDRESS_ID = rs.getString("ADDRESS");
                String NUM_ID = rs.getString("NUM");
                String COURSE_ID = rs.getString("COURSE");
                String SPECIAL_ID = rs.getString("SPECIAL");
                String SCHOOL_ID = rs.getString("SCHOOL");
                String DOWNPAY_ID = rs.getString("DOWNPAY");
                String DISCOUNT_ID = rs.getString("DISCOUNT");
                String BALANCE_ID = rs.getString("BALANCE");
                String REVSCHED_ID = rs.getString("REVSCHED");
                String EMAIL_ID = rs.getString("EMAIL");

                NAME.setText(NAME_ID);
                AGE.setText(AGE_ID);
                ADDRESS.setText(ADDRESS_ID);
                NUM.setText(NUM_ID);
                COURSE.setText(COURSE_ID);
                SPECIAL.setText(SPECIAL_ID);
                SCHOOL.setText(SCHOOL_ID);
                DOWNPAY.setText(DOWNPAY_ID);
                DISCOUNT.setText(DISCOUNT_ID);
                BALANCE.setText(BALANCE_ID);
                REVSCHED.setText(REVSCHED_ID);
                EMAIL.setText(EMAIL_ID);

            }

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }

    }       

Когда я запускаю программу и пытаюсь щелкнуть данные (профиль учащегося, такие как имя, возраст, школа и т. Д.), Которые я создал и напечатал внутри jtable (щелкнув мышью), у меня возникает эта проблема "ORA-00933: Команда SQL неправильно завершена "

Кроме этого, у меня также есть другая проблема, которую я создал 2 кнопки, называемой «УДАЛИТЬ», что означает, что она удалит заполненные данные (профиль студента), и «ОБНОВЛЕНИЕ», что означает повторное редактирование данных (профиль студента). что я заполнил.

это запрос моей кнопки "DELETE" в netbeans

try {
            String query;
            query = "DELETE FROM CAREPOINT_STUDENT where NAME="+NAME.getText()+" ";
            pst= (OraclePreparedStatement) ungabelio1.prepareStatement(query);

            pst.execute();
            JOptionPane.showMessageDialog(null, "Successfully deleted!");
            fetch();

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, e);
        }
    }     

и это запрос моей кнопки "ОБНОВЛЕНИЕ" в netbeans

try {
            String query;
            query = "update CAREPOINT_STUDENT set AGE=?,ADDRESS=?,NUM=?,COURSE=?,SPECIAL=?,SCHOOL=?,DOWNPAY=?,DISCOUNT=?,BALANCE=?,REVSCHED=?,EMAIL=? where NAME="+NAME.getText()+"";
            pst= (OraclePreparedStatement) ungabelio1.prepareStatement(query);

            pst.setString(1,AGE.getText());
            pst.setString(2,ADDRESS.getText());
            pst.setString(3, NUM.getText());
            pst.setString(4, COURSE.getText());
            pst.setString(5, SPECIAL.getText());
            pst.setString(6, SCHOOL.getText());
            pst.setString(7, DOWNPAY.getText());
            pst.setString(8, DISCOUNT.getText());
            pst.setString(9, BALANCE.getText());
            pst.setString(10, REVSCHED.getText());
            pst.setString(11, EMAIL.getText());

            pst.executeUpdate();
            JOptionPane.showMessageDialog(null, "Successfully updated!");
            fetch();

        } catch (Exception e){

            JOptionPane.showMessageDialog(null, e);
        }
    }                    

когда я запускаю программу и нажимаю эти 2 кнопки, у меня возникает та же проблема "ORA-00936: отсутствует выражение"

Я действительно ценю и надеюсь, что кто-нибудь поможет мне решить эту проблему. Так что я могу получить немного знаний о SQL / Oracle.

Извините за мой плохой английский.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Избегайте объединения параметров в виде строк; используйте подготовленные заявления.

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

Например, более безопасный способ выполнения вашего оператора SQL может быть:

String query = "select * from CAREPOINT_STUDENT where NAME = ?";
pst = (OraclePreparedStatement) ungabelio1.prepareStatement(query);
pst.setString(1, tc);
rs = (OracleResultSet) pst.executeQuery();

Примечание : сборка оператора SQL в виде строки по-прежнему полезна в тех случаях, когда требуется выполнить динамический SQL. Даже тогда используйте ? для параметров и применяйте их, как показано выше.

0 голосов
/ 23 января 2019

Возможно, вам понадобятся дополнительные одинарные кавычки, поэтому ваш запрос будет выглядеть так:

select * from CAREPOINT_STUDENT where NAME='Entered name';

Настройте свой код:

String query ="select * from CAREPOINT_STUDENT where NAME='"+tc+"' ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...