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

Java ORA-04054:数据库链接GMAIL.COM不存在,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我需要学院项目Java web与hibernate和oracle数据库的帮助,这必须编辑之前添加的用户,这些用户有: 邮件主键 通过 typeuser.iduser FK 添加和删除它工作但不编辑,错误为: javax.servlet.ServletException:java.sql.SQLSyntaxErrorException:ORA-04054:数据库链接GMAIL.COM不存在 <% //CONECTANOD A LA BASE DE DATOS:

我需要学院项目Java web与hibernate和oracle数据库的帮助,这必须编辑之前添加的用户,这些用户有: 邮件主键 通过 typeuser.iduser FK

添加和删除它工作但不编辑,错误为: javax.servlet.ServletException:java.sql.SQLSyntaxErrorException:ORA-04054:数据库链接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()) {
        %>``` 



我已经尝试过使用预先准备好的声明,但我认为我做得不对

邮件不需要编辑。只有用户类型和密码需要它,但在按下编辑按钮的那一刻,它向我显示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()) {
        %>``` 




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

        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();
OldProgrammer为您提供了正确的方法。如果您正确使用PreparedStatement,它将正确处理引用,并防止攻击

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

 select * from usuario where correo=someone@gmail.com
由于电子邮件地址没有被引用,SQL解析器不会将其识别为字符串文字。相反,它将其视为db链路,如中所述

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

由于没有创建名为gmail.com的数据库链接,因此该操作失败。

使用PreparedStatement传递值。不要将参数连接到SQL查询中。