ORA-00904: "pass": 无效的标识符

Posted

技术标签:

【中文标题】ORA-00904: "pass": 无效的标识符【英文标题】:ORA-00904: "pass": invalid identifier 【发布时间】:2013-05-06 07:58:27 【问题描述】:

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

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

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

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

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

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)
)

【问题讨论】:

【参考方案1】:

ORA-00904引用选择语句中的无效别名时很常见。

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

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

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

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

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

【讨论】:

【参考方案2】:

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

我的java代码是

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

【讨论】:

创建表 clogindetails("admitid" varchar2(100), "name" varchar2(100), "logid" varchar2(100), "pass" varchar2(100)); 我对数据库进行了更改,但现在出现了新错误并且数据未保存 - java.sql.SQLException: ORA-00904: "LOGID": invalid identifier 你做了什么改变??无效的标识符意味着相同的错误检查数据库列名和java代码名.. 我在数据库中将密码更改为密码。我删除了双引号。现在数据正在正确保存。但是在登录时我收到一个新错误 java.sql.SQLException: Invalid column name 创建表 CLOGINDETAILS(ADMITID VARCHAR2(100), NAME VARCHAR2(100), LOGID VARCHAR2(100), PASSWORD VARCHAR2(100));【参考方案3】:

现在试试这个

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

其余代码保持原样..

【讨论】:

我改了,现在错误是:java.sql.SQLException: ORA-00904: "PASS": invalid identifier【参考方案4】:

尝试做这个:

更改您的查询

来自: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 '&amp;Medet&amp;' 否则会报错。

希望对您有所帮助!

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于ORA-00904: "pass": 无效的标识符的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"

ORA-00904: "FORMAT": 无效标识符

ORA-00904: "CEILING": ORACLE 11G 中的标识符无效

ORA-00904: "DAYS": 无效标识符

ORA-00904: "PREV_TEMP": 带有 LAG 函数的无效标识符

SQL 错误:ORA-00904:“GENDER”:无效标识符 00904。00000 -“%s:无效标识符”