Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet中的sql语句无效_Java_Sql_Oracle_Jdbc_Ora 00942 - Fatal编程技术网

Java servlet中的sql语句无效

Java servlet中的sql语句无效,java,sql,oracle,jdbc,ora-00942,Java,Sql,Oracle,Jdbc,Ora 00942,在登录页面中,我验证用户是否可以进入系统, 我制定了验证用户的方法: boolean isValidUser(Connection con,String userName,String pass ){} 它在桌面应用程序中正常工作,但当我在servlet中尝试它时,表或视图不存在是一个例外???但我的数据库中是否存在该表?? 谁能告诉我哪里出了问题 这就是方法 public boolean isValidUser(Connection con,String userName,String p

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

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

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

我猜想,当在桌面应用程序和servlet中运行时,您正在连接到另一个Oracle数据库。这可能是故意的,也可能是偶然的

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

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

编辑

我怀疑根本问题在于JDBCURL中的“localhost”在桌面和servlet情况下将您发送到不同的主机(以及Oracle数据库服务器)。尝试使用包含您尝试使用的数据库的服务器的实际DNS名称

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


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

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

我猜想,当在桌面应用程序和servlet中运行时,您正在连接到另一个Oracle数据库。这可能是故意的,也可能是偶然的

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

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

编辑

我怀疑根本问题在于JDBCURL中的“localhost”在桌面和servlet情况下将您发送到不同的主机(以及Oracle数据库服务器)。尝试使用包含您尝试使用的数据库的服务器的实际DNS名称

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


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

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

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


如果您不能更改用于从servlet访问数据库的凭据,考虑向第二个用户授予必要的特权(在这种情况下选择),尽管我必须承认它不能完全解决您的问题。第二个数据库用户帐户需要对第一个帐户所拥有的或多或少的所有对象拥有权限,因为您的应用程序不太可能被设计为使用多个数据库帐户。

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

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


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

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

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

提供有关异常和JDBC配置的更多详细信息可能会有所帮助。我们是否有可能看到查询数据库的代码?这是异常{ORA-00942:表或视图不存在}什么数据库?您确定web应用程序用于构建连接的db帐户有权访问该表吗?我的数据库名称是orcl,这是db位置“jdbc:oracle:thin://@localhost:1521/orcl,但我会进行新的用户测试,我会将用户添加到其中,因为我不想在创建时使用具有完全权限的系统用户