ORA-04054:数据库链接GMAIL.COM不存在

时间:2019-06-08 23:15:24

标签: java sql oracle jdbc

我需要大学项目的帮助(带有休眠和Oracle数据库的Java Web),这需要编辑以前添加的用户,这些用户具有: 邮件pk 通过 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 个答案:

答案 0 :(得分:4)

OldProgrammer为您提供了shown的正确方法。如果正确使用了PreparedStatement,它将正确处理引号,并防止SQL injection攻击。

收到模糊的错误消息的原因是,您的SQL语句在连接后很可能看起来像这样:

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

由于未引用电子邮件地址,因此SQL解析器无法将其识别为字符串文字。而是将其视为CREATE DATABASE LINK中所述的“数据库链接”。

  

创建数据库链接后,可以通过在表或视图名称后附加@dblink,在SQL语句中使用它来引用其他数据库的表和视图。

这失败了,因为尚未创建名称为“ gmail.com”的此类数据库链接。

答案 1 :(得分:2)

您没有使用正确的参数调用正确的方法。应该是这样的:

        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();