ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

データが壊れる現象への対処

理由が理解できていませんが、対処をしています。

f:id:AJYA:20130619123622j:plain

photo credit: pedro mg via photopin cc

 

上手く動作しない

修正したプログラムをテストしていると、5回ループして表示する筈が、4回しか表示していませんでした。

回数は、データベースを照会した結果のレコード数に依存するので、レコード数を確認すると5レコードになっていました。

レコード数は5レコードになっていても、1レコードずつメモリに読み込むと、5レコード目が空になっていて、読み込めていませんでした。

 

別々だから関係ないはず

ソースコードを調べていて、気になる点がありました。

データベースの照会結果を1レコードずつメモリに読み込みながら、別のオブジェクトのメソッドで加工して、戻す部分があり、別のクラスの中でデータベースにアクセスしていました。

別のオブジェクトと呼び出している側は、データベースコネクションを別々に行っていて、データベースの照会結果も別々に保持され、影響はないはずです。

 

影響されていた

試しに、別のオブジェクトのメソッドの呼び出しをコメントアウトして動作を確認したところ、5回表示されました。

別々に保持されているはずのデータベースの照会結果が、結果として影響してしまうようです。

 

対処

呼び出し側で、データベースの照会結果を1レコードずつメモリに読み込みながら処理していたのを止めて、照会結果全てをメモリに読み込んでから処理するように修正しました

 

納得できる原因がしりたいです。