неверный оператор SQL в сервлете - PullRequest
1 голос
/ 08 сентября 2010

На странице входа в систему я проверяю, что пользователь может войти в систему, я делаю метод, который проверяет пользователя:

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

он работает правильно в настольном приложении, но когда я пробовал его в сервлете, он делает исключениеэта таблица или представление не существует ???но таблица уже есть в моем БД?Может кто-нибудь сказать мне, где проблема?

это метод

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 ]

3 голосов
/ 08 сентября 2010

Учитывая, что тот же код выполняется правильно в контексте настольного приложения, вы можете проверить подробности соединения JDBC, которые используются для получения соединения в сервлете.

Это важно вслучай баз данных, таких как Oracle, так как несколько учетных записей пользователей базы данных могут существовать в одной установке базы данных.Вполне возможно, что отдельная учетная запись пользователя Oracle использовалась в контексте приложения базы данных, а другая - в контексте сервлета.В Oracle объекты базы данных принадлежат определенному пользователю, и если другая учетная запись желает получить доступ к той же учетной записи, то права доступа должны быть предоставлены второй учетной записи.

Если вы не можете изменить учетные данные, используемые для доступа к базе данных изсервлет, рассмотрите возможность предоставления необходимых привилегий (в данном случае SELECT) второму пользователю, хотя я должен признать, что это не решит вашу проблему полностью.Вторая учетная запись пользователя базы данных потребует прав более или менее всех объектов, принадлежащих первой, поскольку маловероятно, что ваше приложение было разработано для использования нескольких учетных записей базы данных.

2 голосов
/ 08 сентября 2010

Если Oracle говорит вам, что таблица или представление "не существует", то это говорит вам, что it не может их найти ... даже если you считает, что оно должен их найти.

Я бы рискнул предположить, что вы подключаетесь к другой базе данных Oracle при запуске в настольном приложении и в сервлете. Это может быть умышленно или случайно.

Посмотрите на ваши соответствующие конфигурации JDBC; в частности, URL-адреса подключения.

(Также возможно, что это проблема с разрешениями. Но я бы подумал, что Oracle скажет вам, что у вас нет разрешения на использование таблицы или представления ... вместо того, чтобы сказать, что это не так. не существует.)

EDIT

Я подозреваю, что основная проблема заключается в том, что «localhost» в URL-адресе JDBC отправляет вас на разные хосты (и, следовательно, на серверы баз данных Oracle) в случае рабочего стола и сервлета. Попробуйте использовать фактическое DNS-имя сервера, на котором находится база данных, которую вы пытаетесь использовать.

если да, куда мне добавить данные в orcle db для тестирования моего приложения

Вы должны задать этот вопрос своему локальному администратору базы данных!

1 голос
/ 14 сентября 2010

Пользователь вашей базы данных, вероятно, отличается от пользователя таблицы, поэтому, если вы не предоставите права выбора для этой таблицы (и префикс всех ссылок: tablename -> owner.tablename), Oracle не позволит вам получить доступ к этой таблице.

...