Oracle запрос в Java - PullRequest
       2

Oracle запрос в Java

0 голосов
/ 21 ноября 2018

У меня возникли некоторые проблемы с использованием Oracle, поскольку я привык к синтаксису MySql,

Я пытаюсь реализовать запрос в моей Java-программе, но получаю сообщение об ошибке: ora-0933 sqlкоманда не завершена должным образом.

Мой запрос:

String query1 = "SELECT t.nome, h.Valor_Atual, h.Valor_Antigo, a.nome 
  FROM  Tecnologias t, Historico h, Academista a
  WHERE h.Id_Academista = a.Id_Academista 
    AND h.Id_Tecnologia = t.Id_Tecnologia 
    AND (Valor_Atual || Valor_Antigo  || nome) 
  LIKE '%" +ValToSearch + "%'";

Я что-то не так делаю или это синтаксис Oracle?

Большое спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Хотя (Valor_Atual || Valor_Antigo || nome) LIKE '%" +ValToSearch + "%' является допустимым синтаксисом SQL, он может некорректно совпадать, если искомое значение совпадает с переходом от значения одного столбца к следующему.Итак, вам нужно использовать OR, и вам нужно отдельно проверять столбцы.

Другие проблемы:

  • Использовать JOIN синтаксис
  • Использовать PreparedStatement вместо конкатенации строк
  • Используйте try-with-resources (при условии, что вы не)

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

String sql = "SELECT t.nome, h.Valor_Atual, h.Valor_Antigo, a.nome" +
              " FROM Historico h" +
              " JOIN Academista a ON a.Id_Academista = h.Id_Academista" +
              " JOIN Tecnologias t ON t.Id_Tecnologia = h.Id_Tecnologia" +
             " WHERE h.Valor_Atual LIKE ?" +
                " OR h.Valor_Antigo LIKE ?" +
                " OR a.nome LIKE ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    stmt.setString(1, "%" + ValToSearch + "%");
    stmt.setString(2, "%" + ValToSearch + "%");
    stmt.setString(3, "%" + ValToSearch + "%");
    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            // code here
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...