繁体   English   中英

Java中的MySQL预准备语句未返回值

[英]MySQL prepared statement in Java not returning a value

我有一个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");
}

当我对此进行测试时,返回值中包含的内容为“执行查询后”; 这意味着没有返回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的记录。

在您的if之前添加rs.beforeFirst()

希望这可以帮助。

这只是意味着rs.next()返回false。 System.err.println("error message")或仅实际使用调试器(实际上应该使用调试器)可能会对您有所帮助。 因此,您就没有旅客编号1的记录。您是否直接在SQL编辑器中对此进行了验证?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM