我需要大学项目的帮助(带有休眠和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()) {
%>```
答案 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();