ORA-00923: ключевое слово FROM не найдено там, где ожидается в SeleniumWebDriver - PullRequest
0 голосов
/ 04 июня 2018

Я создал класс (ValidarStatusOsPage) в Java, который устанавливает соединение с БД и возвращает тестовому классу (ValidateStatusOsTest) результат запроса и выводит его на экран.

Когда я запускаю тесткласс, консоль Eclipse отображает сообщение:

ORA-00923: ключевое слово FROM не найдено, где expecte

Я несколько раз просматривал код, но не могу проверить, гдеошибка:

Ниже приведен класс Java для подключения к БД и классу тестирования.

public class ValidarStatusOsTest {

static String query;

@Test
public void validarOs() {

    ValidarStatusOsPage os = new ValidarStatusOsPage();
    query = os.returnDb("179195454");

}}


public class ValidarStatusOsPage {

String resultado;

public String returnDb(String NuOs) {
    // Connection URL Syntax: "jdbc:mysql://ipaddress:portnumber/db_name"
    String dbUrl = "jdbc:oracle:thin:@10.5.12.116:1521:desenv01";

    // Database Username
    String username = "bkofficeadm";

    // Database Password
    String password = "bkofficeadmdesenv01";

    // Query to Execute
    String query = "SELECT NU_OS, CD_ESTRATEGIA, CD_STATUS, NU_MATR, DT_ABERTURA" +
                   "FROM tb_bkoffice_os"+
                   "WHERE  NU_OS ="+ NuOs +"";

    try {
        // Load mysql jdbc driver
        Class.forName("oracle.jdbc.driver.OracleDriver");

        // Create Connection to DB
        Connection con = DriverManager.getConnection(dbUrl, username, password);

        // Create Statement Object
        Statement stmt = con.createStatement();

        // Execute the SQL Query. Store results in ResultSet
        ResultSet rs = stmt.executeQuery(query);

        // While Loop to iterate through all data and print results
        while (rs.next()) {
            String NU_OS         = rs.getString(1);
            String CD_ESTRATEGIA = rs.getString(2);
            String CD_STATUS     = rs.getString(3);
            String NU_MATR       = rs.getString(4);
            String DT_ABERTURA   = rs.getString(5);

            resultado = NU_OS + "  " + CD_ESTRATEGIA + "  " + CD_STATUS + "  " + NU_MATR + "  " + DT_ABERTURA + "\n";
            System.out.println(NU_OS + " - " + CD_ESTRATEGIA + " - " + CD_STATUS + " - " + NU_MATR + " - "+ DT_ABERTURA);

        }
        // closing DB Connection
        con.close();
    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    } catch (SQLException e) {

        e.printStackTrace();

    }
    return resultado;
}}

ORA-00923Erro

1 Ответ

0 голосов
/ 04 июня 2018

В вашем запросе есть 3 точки:

SELECT NU_OS, CD_ESTRATEGIA, CD_STATUS, NU_MATR, DT_ABERTURA" +
               "FROM tb_bkoffice_os"+
               "WHERE  NU_OS ="+ NuOs +""
  1. пробел до пропущенного ОТ первой части запроса: SELECT NU_OS, CD_ESTRATEGIA, CD_STATUS, NU_MATR, DT_ABERTURAFROM
  2. пробел пропущен перед ГДЕ: SELECT NU_OS, CD_ESTRATEGIA, CD_STATUS, NU_MATR, DT_ABERTURAFROM tb_bkoffice_osWHERE NU_OS =
  3. Параметр объединения в строку SQL является точной точкой взлома для атаки SQL-инъекцией.Никогда не делайте это в реальной программе, даже если она чисто автономная.Всегда используйте параметры для запросов.

и немного последний: + NuOs +"" - последний "" вообще не имеет смысла ...

удачи.

UPD: @YCF_L абсолютно правильно использовать подготовленный оператор.

вам нужно сделать это: в строке Sql: WHERE NU_OS = ?

в коде:

PreparedStatement stmt = con.prepareStatement(query);

stmt.setString(1, NuOs); 
 //also works: stmt.setObject(1,NuOs);

вещей дляпомните с JDBC:

  1. все параметры в SQL просто?отметки
  2. индексы параметров начинаются с 1 (не 0)
  3. и в порядке их появления в SQL от strat до конца

(например, Select * FROM tbl WHERE col1=? and col2=? имеет параметр 1для col1 и параметр 2 для col2

PS. Ваш исходный SQL имеет еще одну ошибку, но я не собираюсь рассказывать вам, что это :-) используйте параметр и все будет хорошо.

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