servlet中的sql语句无效

时间:2010-09-07 23:37:19

标签: java sql oracle jdbc ora-00942

在登录页面中,我进行验证,允许用户进入系统, 我制作验证用户的方法:

 boolean isValidUser(Connection con,String userName,String pass ){}

它在桌面应用程序中正常工作,但是当我在servlet中尝试它时,它会使表或视图不存在的异常???但是我的数据库中存在表格吗? 有人能告诉我问题在哪里吗?

这是方法

public boolean isValidUser(Connection con,String userName,String pass )throws SQLException
{
    String selSQL="SELECT USER_NAME, USER_PASS FROM OSQS_USERS where USER_NAME =? and USER_PASS =?";
    ResultSet rs =null;
    boolean exist =false;
    PreparedStatement pstmt = null;
    try {

        pstmt = con.prepareStatement(selSQL);
        pstmt.setString(1,userName);
        pstmt.setString(2, pass);

        rs=pstmt.executeQuery();
        if(rs.next())
            exist= true;

    }
//close statment and result sest 
return exist;
}

3 个答案:

答案 0 :(得分:3)

鉴于相同的代码在桌面应用程序的上下文中正确执行,您可能需要检查用于检索servlet中的连接的JDBC连接详细信息。

对于像Oracle这样的数据库,这很重要,因为在单个数据库安装中可以存在多个数据库用户帐户。很可能在数据库应用程序的上下文中使用单独的Oracle用户帐户,而在servlet的上下文中使用另一个用户帐户。在Oracle中,数据库对象由特定用户拥有,如果另一个帐户希望访问该数据库对象,则必须授予第二个帐户的权限。

如果您无法从servlet更改用于访问数据库的凭据,请考虑向第二个用户授予必要的权限(在本例中为SELECT),但我必须承认它不能完全解决您的问题。第二个数据库用户帐户将要求或多或少拥有第一个所拥有的所有对象的权限,因为您的应用程序不太可能被设计为使用多个数据库帐户。

答案 1 :(得分:2)

如果Oracle告诉您某个表或视图“不存在”,那么它会告诉您无法找到它们......即使认为它应该找到它们。

当您在桌面应用程序和servlet中运行时,我会猜测您正在连接到不同的Oracle数据库。这可能是设计或偶然的。

查看各自的JDBC配置;特别是连接URL。

(这也可能是权限问题。但我认为Oracle会告诉你,你没有权限使用表或视图......而不是告诉你它没有'存在。)

修改

我怀疑根本问题是JDBC URL中的'localhost'正在将您发送到桌面和servlet案例中的不同主机(以及Oracle数据库服务器)。尝试使用包含您尝试使用的数据库的服务器的实际DNS名称。

  

如果是,我应该在哪里向orcle db添加数据以对我的应用程序进行测试

您应该向本地数据库管理员询问此问题!

答案 2 :(得分:1)

您的数据库用户可能是与表所有者不同的用户,因此除非您授予该表的选择权限(并为所有引用添加前缀:tablename - > owner.tablename),否则Oracle将不允许您访问该表。