java - SQL 命令在 servlet 中未正确结束

标签 java servlets jdbc

我有一个 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/

相关文章:

jdbc - 使用 kafka-connect 从多个主题更新到多个表

java - 如何克服大文件写入期间的 OutOfMemoryError

java - 构建依赖于 Android 项目 Gradle 的 Java 库

java - StartCalculatorActivity 类的 NoClassDefFoundError

java - Tomcat 不呈现 jsp 页面

java - 严重 : Allocate exception for servlet <myservlet-name> java. lang.ClassNotFoundException:<myservlet> 异常

java - 我正在寻找一种最好在同一类中同时拥有 servlet 和 jax ws 监听器的方法

java - 为什么 Hibernate 将我的批量插入分成 3 个查询

java - 尝试 Unicode 字符集

java - 禁用 Java 警告外观并影响 Java Web Start 应用程序