簡體   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