2012-02-01 5 views
1

を更新誰かが次の操作を行うためのより良い方法を知っていた場合、私は思っていた:MySQLデータベースのクエリと

私はデータベースを照会し、(この場合はint型)の値を返す必要が、この値を使用して、計算しますこの新しい値でデータベースを更新します。

現在の方法では、データベースから現在のint値を取得し、この値を別のメソッドに渡して計算を実行し、新しい値を3番目のメソッドに渡してデータベースを更新します。

したがって、この問題(?)は、dbから初期値を取得してから更新するときにプールから新しい接続を開くことです。明らかに、メソッドの最後に接続を閉じますが、これを行うにはより簡単な方法がありますか?ちょっと混乱しているようです。

+0

私はあなたが1つのタグを見逃したと思う。あなたはサーバー側でJavaを使用していますか? –

+0

まあ、私はJavaサーバー側を使用しています。それを今すぐ追加しました – Predz

答えて

0

これを試してください:あなたは複数テーブルのUPDATEを悪用する可能性があり、あなたの要件に応じて

UPDATE TableToUpdate 
SET ColumnB = 
    Calculations((SELECT ColumnA 
        FROM TableToSelect 
        WHERE (conditions for selecting) 
       ) 
       ) 
WHERE (conditions for updating) 
+0

彼はプールを使用しています。そして私が質問を正確に理解していれば、同じ接続を使って値を選択して更新するのではないので、更新は1つの接続を使用するようにロジックを変更する場合にのみ有効です。 –

+0

これもオプションです。 Predzがあなたの答えを理解できるようにしようとしています。 –

+0

@SérgioMichels、私はあなたに同意しますが、OPは彼が3つの異なる方法を使用していると述べ、私はそれがより良いaproachを知らなかったので理解した。 –

0

クエリごとに新しい接続を開く必要はありません。リクエストの開始時に接続を開いて、すべてのメソッドで使用できるグローバル変数への参照を保存し、リクエストの最後にその変数を閉じます。

0

を参照してください

UPDATE TableToUpdate U JOIN TableToSelect S ON (-- join condition for selection value to process) 
SET U.ColumnB = Calculations(S.ColumnC) 
WHERE U.ColumnC = -- whatever selection condition 
+0

@Predzこれはあなた自身の関数Calculations()、http://dev.mysql.com/doc/refman/5.1/en/create-function-udfを作成する必要があります。 .html – Umbrella

0

:あなたはSQLで計算を行うことができる場合

SELECT fieldValue FROM table_name FOR UPDATE; 
UPDATE table_name SET fieldToUpdate = fieldValue + 1; 

UPDATE Syntax

関連する問題