0

我正在使用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 的人手更短,并且只希望参数按正确(从前到后)的顺序排列。

奖励:有没有办法释放结果集?(除了关闭光标)

4

1 回答 1

1

看起来这个扩展使用了普通的Python 数据库规范 v2

因为execute它说:

游标将保留对该操作的引用。如果再次传入相同的操作对象,则游标可以优化其行为。这对于使用相同操作但绑定不同参数(很多次)的算法最有效。

它说executemany

与 .execute() 相同的注释也相应地适用于此方法。

因此,如果此驱动程序实际上实现了这些建议的语义,那么只需将相同的字符串传入executeexecutemany应该重用preparedstatement,但是您可能需要检查实现(或询问实现者)以确保

于 2012-05-31T18:14:51.983 回答