我有一个 Web 服务方法,可以针对 MySQL 数据库执行准备好的语句。当我在 MySQL 中运行此语句时,我得到一个返回值:
SELECT first_name
FROM lytthouse_airlines.passenger
WHERE passenger_id = 1
;
但是当我在 java 类中运行这个准备好的语句时,它不起作用:
PreparedStatement getName = connection.prepareStatement(
"SELECT first_name " +
" FROM lytthouse_airlines.passenger " +
" WHERE passenger_id = ? "
);
getName.setInt(1, passengerId);
rs = getName.executeQuery();
returnValue = "After executing query";
if (rs.next())
{
returnValue = "inside rs.next";
returnValue = rs.getString("first_name");
}
当我测试这个时,我在 returnValue 中得到的内容包含“执行查询后”;这意味着没有返回 ResultSet (rs),因此不会进入 if (rs.next()) 逻辑。
有人知道出了什么问题吗?
新内容
在郭的回答之后,我稍微改变了代码,这样我就可以看到passengerId的值。当我运行 Web 服务测试时,我得到了这个非常有趣的结果。
Method parameter(s)
Type Value
int 1
Method returned
java.lang.String : "After executing query, with a passengerId of 0"
我已经仔细检查过,并且在方法中的任何地方都不会在到达他们查询之前更改 PassengerId 的值。
另一条新评论
我认为这个问题与准备好的语句无关,它似乎与方法本身有关。我将方法的开头更改为如下所示
@WebMethod(operationName = "getPassengerName")
public String getPassengerName(@WebParam(name = "passengerId ") int passengerId)
{
//MySQL elements
Connection connection;
ResultSet rs = null;
String returnValue = "start method with passengerId having a value of: " + passengerId;
当我运行测试时,我得到这个:
getPassengerName Method invocation
Method parameter(s)
Type Value
int 1
Method returned
java.lang.String : "start method with passengerId having a value of: 0"
我认为这需要一个新问题。我现在提出一个新问题。再次感谢所有查看此内容并提供反馈的人。我确实很感激。
最佳答案
我在本地主机上测试了结果,结果是正确的。
所以我认为您没有 passenger_id = 1
的记录。
关于java - Java 中的 MySQL 准备语句不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25110419/