我有一个使用Java / JSP的Web应用程序运行MySQL数据库,我现在已经转移到Sybase。
我已经改变了我认为的所有相关连接部分(Sybase连接器和相关代码)
我一直在使用PreparedStatements来查询。在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 :(得分:1)
字符串比较失败可能是因为空格被填充到数据库列。
result.getString("pass").trim().equals(pass.trim())
另一个建议。如果您确信它总是会返回一行(或零),而不是while(results.next())
,请执行if(results.next())
。