2011-07-27 9 views
0

私はSybaseに移動したMySQLデータベースを実行していたJava/JSPを使用しているWebアプリケーションを使用しています。Javaを使用したSybaseクエリの準備ができていない文

私は私が私のクエリのためのPreparedStatementを使用してきたすべての関連する接続部(Sybaseのコネクタおよび関連するコード)

あると考えているものを変更しました。 MySQLで動作していたものは、もはや何も返されません(エラーや結果)。

私がテストした最初の簡単なクエリは、テーブル "appuser"の名前とパスワードのユーザー値と一致するログインフォームです。

提供されたコードのPrepared Statementは、以前は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; 
} 
+0

エラーが発生しますか? – Jacob

+0

エラーは発生していないようです。それはクエリを実行し、結果が返されなかったかのように動作し、後でコードが "ログインに失敗しました"という画面にリダイレクトされます。 – LoganFrederick

+0

あなたのsystem.out.printlnステートメントは実際に印刷されますか?あなたが「働いていない」と言うとき、それはどういう意味ですか? – Kal

答えて

1

スペースがデータベースの列に埋め込まれているため、文字列の比較に失敗する可能性があります。

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

もう1つの提案。 while(results.next())の代わりにif(results.next())を実行してください。常に正確に1つの行(またはゼロ)を返すと確信している場合は、

関連する問題