使用Java准备语句的Sybase查询不起作用

使用Java准备语句的Sybase查询不起作用,java,sybase,prepared-statement,Java,Sybase,Prepared Statement,我有一个使用Java/JSP的web应用程序,它运行在一个MySQL数据库上,我现在已经迁移到Sybase 我已经更改了所有相关的连接部件(Sybase连接器和相关代码) 我一直在使用PreparedStatements进行查询。在MySQL中工作的内容现在不再返回任何内容(错误或结果) 我测试的第一个简单查询是一个登录表单,它应该与表“appuser”中name和password的用户值相匹配 提供的代码中的预处理语句用于工作,但不再用于Sybase 相关代码如下。如果还需要什么,请告诉我 p

我有一个使用Java/JSP的web应用程序,它运行在一个MySQL数据库上,我现在已经迁移到Sybase

我已经更改了所有相关的连接部件(Sybase连接器和相关代码)

我一直在使用PreparedStatements进行查询。在MySQL中工作的内容现在不再返回任何内容(错误或结果)

我测试的第一个简单查询是一个登录表单,它应该与表“appuser”中name和password的用户值相匹配

提供的代码中的预处理语句用于工作,但不再用于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;
}

字符串比较失败,可能是因为数据库列中填充了空格

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

还有一个建议。不要在while(results.next())时执行
if(results.next())
,如果您确信它将始终只返回一行(或零)。

似乎不会发生错误。它的行为就像它运行了查询,但没有返回任何结果,然后在我的代码中,稍后会重定向到“您的登录失败”屏幕。您的system.out.println语句是否实际打印?你说“不工作”是什么意思?是的,Println语句返回:connectionsuccessfulcom.sybase.jdbc2.jdbc。SybConnection@a36b53loginAction:0 loginAction:false正在控制台上打印valid=false(很抱歉,在我看到您发布了回答我的问题的评论后删除了我的问题)您是否在url中指定架构?(否则可能找不到appuser?)