ORA-04054: ссылка на базу данных GMAIL.COM не существует - PullRequest
0 голосов
/ 09 июня 2019

Мне нужна помощь с проектом моего колледжа (Java web с базой данных hibernate и oracle), он должен редактировать уже добавленных ранее пользователей, которые имеют: Mail pk pass typeuser.iduser FK.

добавить и удалить егоработает, но не редактирует, ошибка: javax.servlet.ServletException: java.sql.SQLSyntaxErrorException: ORA-04054: ссылка на базу данных GMAIL.COM не существует

я уже пытался с использованием подготовленного оператора, но я думаю, что ясделал неправильно

почта не нуждается в редактировании.это нужно только типу пользователя и паролю, но в момент нажатия кнопки редактирования это показывает, что ошибка gmail.com не существует

<%
            //CONECTANOD A LA BASE DE DATOS:

            Class.forName("oracle.jdbc.OracleDriver").newInstance();
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "C##PORTA", "oracle");
            String id = request.getParameter("correo");
            PreparedStatement  stm = con.prepareStatement(id);
            String Query = "select * from usuario where correo=" + id;
            PreparedStatement ps;
            ResultSet rs = stm.executeQuery(Query);
            while (rs.next()) {
        %>``` 



Ответы [ 2 ]

4 голосов
/ 09 июня 2019

В OldProgrammer показано , как вам это сделать.Если вы используете PreparedStatement (правильно), он будет корректно работать с цитатами, а также защищать от атак SQL инъекция .

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

 select * from usuario where correo=someone@gmail.com

Поскольку адрес электронной почты не указан в кавычках, синтаксический анализатор SQLне распознает это как строковый литерал.Вместо этого он обрабатывается как «ссылка на БД», как описано в CREATE DATABASE LINK .

После создания ссылки на базу данных ее можно использовать в инструкциях SQL для ссылки на таблицы и представления в другой базе данных, добавив @dblink к имени таблицы или представления.

И это не получается, потому что такая ссылка на базу данных с именем "gmail.com" не была создана.

2 голосов
/ 09 июня 2019

Вы не вызываете правильные методы с правильными параметрами.Должно быть что-то вроде:

        String id = request.getParameter("correo");
        String query = "select * from usuario where correo= ?";
        PreparedStatement  stm = con.prepareStatement(query);
        stm.setString(1, id );
        ResultSet rs = stm.executeQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...