Jython中的JDBC,准备好的语句

Jython中的JDBC,准备好的语句,jdbc,jython,jython-2.5,Jdbc,Jython,Jython 2.5,我正在寻找Jython和JDBC(zxJDBC)/SQLite中准备好的语句。 我只找到了这样的例子(,): 但是,我始终将准备好的语句理解为一种让数据库在不知道为占位符插入的值的情况下优化语句的方法。然后,您将收到该语句的句柄,该句柄已通过优化器传递,并且可以使用不同的值执行该语句,从而节省查询优化工作,因此我认为以下方法更好: qry = cursor.prepare("SELECT * FROM `table` WHERE `field`=? AND `field2`=?") #usual

我正在寻找JythonJDBCzxJDBC)/SQLite中准备好的语句。 我只找到了这样的例子(,):

但是,我始终将准备好的语句理解为一种让数据库在不知道为占位符插入的值的情况下优化语句的方法。然后,您将收到该语句的句柄,该句柄已通过优化器传递,并且可以使用不同的值执行该语句,从而节省查询优化工作,因此我认为以下方法更好:

qry = cursor.prepare("SELECT * FROM `table` WHERE `field`=? AND `field2`=?") #usually mor complex queries
qry.execute(cursor, ?, (val1, val2)??) #here is the problem
不幸的是,我找不到如何使用execute的示例,并且缺少文档

PyStatement.execute(cursor, params, bindings)
你能解释一下
params
的用途吗?我对如何使用
bindings
的猜测是否正确。我对params的最佳猜测是,它们是来自javasjdbc的
setInt
-方法(或类似方法)的第一个参数,这相当令人惊讶。我希望Jython更加缺乏人手,只希望参数按正确的顺序(从前到后)排列


奖金:有办法释放结果集吗?(除了关闭光标之外)

看起来此扩展使用了正常的

对于
execute
,它说:

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

对于
executemany
,它说:

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


因此,如果这个驱动程序实际实现了这些建议的语义,那么只要将相同的字符串传递到
execute
executemany
中,就应该重用preparedstatement,但是您可能需要检查实现(或询问实现者)以确保不是答案(因为我不知道jython),但是第一个调用可能只是准备语句、绑定参数并一次性执行查询。准备好的语句不仅仅是执行几个类似的查询。它还可以帮助驱动程序正确地逃逸参数,并防止SQL注入攻击。这不是答案,因为我需要第二种情况(多次使用同一查询),但见解深刻,没有太多的信息,我仍然希望有人cna能够帮助我使用prepare,即使它只是创建一个绑定
execute
的lambda函数,我也更喜欢在类中存储一个对象,而不是字符串
PyStatement.execute(cursor, params, bindings)