我有一个 servlet,它从表单中获取 emailid 和密码,然后该 servlet 应该访问名为 hr.faculty 的表,如果发现凭据正确,则创建一个 session 。但当我尝试登录时,出现错误:java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
。请帮忙。
代码如下:
email=request.getParameter("email");
pass=request.getParameter("pass");
try{
try {
Class.forName(driver);
} catch (ClassNotFoundException ex) {
out.println(ex);
}
Connection con=null;
con=DriverManager.getConnection(oracleURL,username,password);
DatabaseMetaData dmd=con.getMetaData();
Statement s=con.createStatement();
String q="SELECT password FROM HR.faculty WHERE email=" + email;
ResultSet rs=s.executeQuery(q);
pw=rs.getString("password");
if(pw.equals(pass)){
//session creation
}
最佳答案
看起来您的查询存在语法错误,您没有使用绑定(bind)变量,因此您必须自己进行包装。这会起作用:
String q="SELECT password FROM HR.faculty WHERE email='" + email+"'";
一般来说,使用准备好的语句是更受欢迎的,因为它可以保护您免受 SQL 注入(inject)。
看起来您检索的结果也是无效的,您需要在 ResultSet
中移动光标,否则会返回错误。这会起作用:
ResultSet rs=s.executeQuery(q);
rs.first();//move to the first result
pw=rs.getString("password");
关于java - SQL 命令在 servlet 中未正确结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583317/