JDBC ( zxJDBC ) / SQLiteを使用したJythonの準備済みステートメントを探しています。私が見つけたのは、次のような例です(本、Jythonのドキュメント):
qry = "select continent from country where name = ?"
cursor.executemany(qry,['Austria'])
ただし、プレースホルダーに挿入された値を知らなくても、データベースがステートメントを最適化できるようにする方法として、準備済みステートメントを常に理解していました。次に、オプティマイザーを介して渡されたこのステートメントへのハンドルを受け取り、これをさまざまな値で実行して、クエリの最適化の労力を節約できるため、次のアプローチの方が優れていると思います。
qry = cursor.prepare("SELECT * FROM `table` WHERE `field`=? AND `field2`=?") #usually mor complex queries
qry.execute(cursor, ?, (val1, val2)??) #here is the problem
残念ながら、実行の使用方法の例を見つけることができず、ドキュメントも不足しています。
PyStatement.execute(cursor, params, bindings)
何params
が目的で、どのように使用するかについての私の推測bindings
が正しいかどうかを説明していただけますか. params についての私の最良の推測は、それらがsetInt
Javas JDBC の -Method (または同様のもの) への最初のパラメーターであるということです。これはかなり驚くべきことです。私は、Jython がより手短に扱われ、単純に正しい (前から後ろへ) 順序でパラメーターを期待することを期待していました。
ボーナス: 結果セットを解放する方法はありますか? (カーソルを閉じる以外に)