1

我有一个名为“在线招聘系统”的项目。数据库连接存在问题。

首先,我在 sqlplus 中不使用引号创建了表“registration”和“clogindetails”。然后所有数据用于正确保存,但登录时出现以下错误:

java.sql.SQLException: ORA-00904: PASSWORD: invalid identifier

在此之后,我阅读了 stackoverflow 的多个示例。我在数据库中的表项中添加了“双引号”并将它们保持为小写。

现在数据甚至没有得到保存。我试图在“数据”选项卡中查看“对象浏览器”,但出现以下错误:

failed to parse SQL query:
ORA-00904: "pass": invalid identifier

据我所知,这个项目做得很好。只是制作桌子有问题。

这是使用表“clogindetails”的页面之一的代码:

   String usrname=getClogid();
   String pass=getCpassword();

   if(usrname!=null && pass!=null && usrname.length()>0 && pass.length()>0)
   {
      ps = con.prepareStatement("select * from clogindetails where logid=? and password=?");
      ps.setString(1,usrname);
      ps.setString(2,pass);
      rs=ps.executeQuery();
      HttpSession session=request.getSession(true);
      if(!rs.next())
      {
         errors.add("invalid", new ActionMessage("errors.invalidusername"));
      }
   }

   rs.close();
   ps.close();
   con.close();
}
catch(Exception e)
{
   e.printStackTrace();
}

if(getClogid()==null || getClogid().length()<1)
{
   errors.add("logid", new ActionMessage("errors.logid.required"));
}

if(getCpassword()==null || getCpassword().length()<1)
{
   errors.add("password", new ActionMessage("errors.password.required"));
}
return errors;

clogindetails 的架构是

CREATE TABLE "CLOGINDETAILS"(
   "ADMITID" NUMBER(15,0),
   "NAME" VARCHAR2(25),
   "LOGID" VARCHAR2(10),
   "PASS" VARCHAR2(20)
)
4

5 回答 5

1

当引用 select 语句中的无效别名时, ORA-00904很常见。

要克服此错误,您需要输入有效的列名

为避免ORA-00904,列名不能是保留字,并且必须包含以下四个条件才能有效:

  • 以字母开头
  • 少于或等于三十个字符
  • 仅由字母数字和特殊字符 ($_#) 组成;其他字符需要双引号括起来

有关更多信息,您可以参考此链接。

http://www.dba-oracle.com/t_ora_00904_string_invalid_identifier.htm

于 2018-03-14T05:36:19.660 回答
0

尝试这样做:

更改您的查询

从:select * from clogindetails where logid=? and password=?

至:select * from clogindetails where logid='?' and password='?'

关键是,当您进行查询时,您应该使用“ ”来识别您的标识符,否则您似乎正在将某些未知表列的数据(变量)与现有列中的数据进行比较。

例如:select e.full_name from e.employees where e.full_name like '&Medet&' 否则你会得到一个错误。

希望对你有帮助!

于 2014-10-31T04:59:46.273 回答
0

通过查看用户异常错误,我可以说当我们使用不同的列名时会发生这种类型的异常。例如:我在数据库中创建了表,即创建表 tb_login(username varchar(10), password varchar(10));

我的java代码是

ps=con.prepareStatement("select * from tb_login where username=? and pass=?"); //error bcz pass
此代码将在我的数据库中产生相同的异常 bcz 第二列名称是密码未通过。所以检查你的数据库模式和java代码。或者共享您的数据库架构。

于 2013-05-06T09:19:17.993 回答
0

k 现在试试这个

ps=con.prepareStatement("select * from clogindetails where logid=? and pass=?");

其余代码保持原样..

于 2013-05-06T11:37:40.183 回答
0

当您的列名与您在查询中编写的不同时,会发生此错误。并避免给出作为 oracle 关键字的列名,将其分组不能是您的列名或表名。

于 2016-04-05T10:17:16.827 回答