2012-04-30 4 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'変数の値を設定されていないことを確認しますWebアプリケーションを通じて:) – dasblinkenlight

答えて

1

アップデートにはexecuteUpdateを使用してください。その結果、更新された行の数が返されます(任意に更新された列の新しい値ではありません)。新しいバランスを得るには、フォローアップクエリを実行する必要があります。

prepared statementsも使用してください。あなたがバランスを得ることができないので、

+0

ありがとう。どのようなフォローアップクエリです、あなたは例を与えることができます –

+0

フォローアップクエリは、私は新しい情報を取得するために、更新後に選択クエリを実行することを意味します。 – Perception

0

あなただけのコミットupdateコマンド、コマンドを選択していません、。実際にデータを更新する場合は、代わりにexecuteUpdate()を使用してください。更新によって影響を受ける行の数が返されます。

where条件で指定された行を実際に取得する場合は、SELECTステートメントを使用する必要があります。それはループすることができるResultSetを返します。

0

UPDATE文は(通常は)結果を返さない

0

更新クエリは結果を返しません。 1つのステートメントで更新し、1秒後に選択する必要があります。また、パラメータ化クエリを使用してください - このようなものが良いだろう

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();