ORA-00904:"传递":无效的标识符

时间:2013-05-06 07:58:28

标签: java netbeans sqlplus

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

首先我在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)
)

5 个答案:

答案 0 :(得分:1)

尝试这样做:

更改您的查询

来自:select * from clogindetails where logid=? and password=?

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

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

ex:select e.full_name from e.employees where e.full_name like '&Medet&' 否则你会收到错误。

希望这会对你有帮助!

答案 1 :(得分:0)

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

我的java代码是

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

答案 2 :(得分:0)

k现在试试这个

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

其余代码保持不变..

答案 3 :(得分:0)

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

答案 4 :(得分:0)

引用select语句中的无效别名时,

ORA-00904 很常见。

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

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

  • 以字母开头
  • 小于或等于30个字符
  • 仅包含字母数字和特殊字符($ _#);其他角色需要在它们周围加上双引号

有关详细信息,请参阅此链接。

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