1

在登录页面中,我验证了用户是否可以进入系统,我制作了验证用户的方法:

 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;
}
4

3 回答 3

3

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

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

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

于 2010-09-07T23:53:49.733 回答
2

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

我会冒险猜测您在桌面应用程序和 servlet 中运行时连接到不同的 Oracle 数据库。这可能是故意的,也可能是偶然的。

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

(这也可能是权限问题。但我原以为 Oracle 会告诉您您没有使用表或视图的权限……而不是告诉您它不存在。 )

编辑

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

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

你应该问你的本地数据库管理员这个问题!

于 2010-09-07T23:52:25.257 回答
1

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

于 2010-09-14T16:00:02.337 回答