gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:47:34 25 4
gpt4 key购买 nike

我有一个使用 Java/JSP 的 Web 应用程序,该应用程序在 MySQL 数据库上运行,现在我已将其移至 Sybase。

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

我一直在使用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;
}

最佳答案

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

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

另一个建议。如果您确信它总是返回一行(或者零)。

关于java - 使用 Java 准备语句的 Sybase 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com