2012-04-30 66 views
-2

我寫此查詢,但它不執行編寫的SQL查詢

ResultSet rs6 = stmt.executeQuery(
    "UPDATE customer SET BALANCE = BALANCE + amount WHERE MOBILENUMBER = '"+phone+"' "); 
rs6.next(); 
System.out.print("your account balance is " +rs6.getString("BALANCE")); 

量是double

有什麼錯呢?

+0

確保[小鮑比表(http://xkcd.com/327/)不設置,'phone'變量的值通過網絡應用:) – dasblinkenlight

回答

1

您應該使用executeUpdate更新。其結果將返回更新的行數(不是一些任意更新的列新值)。爲了獲得新的平衡,您將需要執行後續查詢。

此外,使用prepared statements,他們是很好的,真的。

+0

謝謝。什麼是跟進查詢,U可以舉個例子 –

+0

通過後續查詢我的意思是奔跑更新後一個選擇查詢,以獲得新的信息。 – Perception

0

您剛剛提交更新命令,而不是選擇命令,所以你不能取得平衡

0

UPDATE語句不(通常)返回結果。如果你真的要更新的數據,你應該使用executeUpdate()來代替。它將返回受更新影響的行數。

如果你真的想檢索由where條件中規定的行,你應該使用SELECT聲明。這將返回一個可以循環的ResultSet。

0

更新查詢不返回結果。您需要在一條語句中進行更新,然後再選擇一條。另外,請使用參數化查詢 - 這樣的事情會更好

PreparedStatement stmt = connection.prepareStatement("UPDATE customer SET BALANCE = BALANCE + ? WHERE MOBILENUMBER = ?"); 

stmt.setDouble(1, amount); 
stmt.setString(2, phone); 

stmt.execute(); 
stmt.close(); 

stmt = connection.prepareStatement("SELECT BALANCE from customer where MOBILENUMBER = ?"); 
stmt.setString(1, phone); 

ResultSet rs6 = stmt.execute(); 
rs6.next(); 
System.out.print("your account balance is " +rs6.getString("BALANCE")); 

rs6.close(); 
stmt.close();