Запрос Sybase с подготовленными выражениями Java не работает - PullRequest
0 голосов
/ 27 июля 2011

У меня есть веб-приложение, использующее Java / JSP, которое работало с базой данных MySQL, которую я сейчас переместил в Sybase.

Я изменил то, что, по моему мнению, являются соответствующими частями соединения (Sybase Connectorи соответствующий код)

Я использую PreparedStatements для своих запросов.То, что работало в MySQL, теперь больше не возвращает ничего (ошибки или результаты).

Первый простой запрос, который я тестировал, - это форма входа в систему, которая должна соответствовать значениям пользователя для имени и пароля в таблице."appuser".

Подготовленный оператор в предоставленном коде используется для работы, но больше не работает с Sybase.

Соответствующий код приведен ниже.Дайте мне знать, если что-то еще нужно.

public void connectDB() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException
{
    /* String userName="****";
    String password="******";
    String url="jdbc:sybase:sybdev1dw/ETL_MON";
    Class.forName("com.sybase.jdbc4.jdbc.SybDriver").newInstance();
    conn=DriverManager.getConnection(url, userName, password); */

    String driver = "com.sybase.jdbc2.jdbc.SybDriver";
    String host = "********";
    String dbName = "********";
    String url = "jdbc:sybase:Tds:" + host  + ":4110" +"?SERVICENAME=" + dbName;
    String username = "*******";
    String password = "*********";

    Class.forName(driver);
    conn = DriverManager.getConnection(url, username, password);
    System.out.println("Connection successful"+conn);

}

public Boolean loginAction(String name, String pass, String role,HttpServletRequest request) throws SQLException {
    Boolean valid=false;
    session=request.getSession();
    PreparedStatement stmt=conn.prepareStatement("SELECT pass FROM appuser WHERE name=?");
    stmt.setString(1, name);
    results=stmt.executeQuery();

    System.out.println("loginAction:"+results.getFetchSize());

    while(results.next())
    {
        if(results.getString("pass").equals(pass)) 
        {
            valid=true;
            session.setAttribute("name",name);
            session.setAttribute("role",role);
        }
        else
        {
            valid=false;
        }
    }
    System.out.println("loginAction:"+valid);

    return valid;
}

1 Ответ

1 голос
/ 27 июля 2011

Сбой сравнения строк, возможно, из-за пробелов, добавляемых к столбцу базы данных.

result.getString("pass").trim().equals(pass.trim()) 

Еще одно предложение. Вместо while(results.next()), введите if(results.next()), если вы уверены, что он всегда вернет ровно одну строку (или ноль).

...