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