Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将准备好的语句与apachedbutils一起使用?_Java_Prepared Statement_Apache Commons Dbutils - Fatal编程技术网

Java 如何将准备好的语句与apachedbutils一起使用?

Java 如何将准备好的语句与apachedbutils一起使用?,java,prepared-statement,apache-commons-dbutils,Java,Prepared Statement,Apache Commons Dbutils,如何将准备好的语句与apachedbutils一起使用 似乎org.apache.commons.dbutils.*的大多数方法都需要字符串参数。令人惊讶的是,没有一个方法可以接受PreparedStatements 这表示必须使用PreparedStatement。我们看到 private T查询(连接连接、布尔闭合连接、字符串sql、, 结果服务器rsh,对象…参数) ... PreparedStatement stmt=null; 结果集rs=null; T结果=null; 试一试{ st

如何将准备好的语句与apachedbutils一起使用

似乎org.apache.commons.dbutils.*的大多数方法都需要字符串参数。令人惊讶的是,没有一个方法可以接受PreparedStatements

这表示必须使用PreparedStatement。我们看到

private T查询(连接连接、布尔闭合连接、字符串sql、,
结果服务器rsh,对象…参数)
...
PreparedStatement stmt=null;
结果集rs=null;
T结果=null;
试一试{
stmt=this.prepareStatement(conn,sql);
这个.fillStatement(stmt,params);
rs=this.wrap(stmt.executeQuery());
结果=rsh.手柄(rs);
}捕获(SQLE异常){
...
结论?
PreparedStatement
s正在使用中,无需担心。

这表明必须使用一个PreparedStatement。在

private T查询(连接连接、布尔闭合连接、字符串sql、,
结果服务器rsh,对象…参数)
...
PreparedStatement stmt=null;
结果集rs=null;
T结果=null;
试一试{
stmt=this.prepareStatement(conn,sql);
这个.fillStatement(stmt,params);
rs=this.wrap(stmt.executeQuery());
结果=rsh.手柄(rs);
}捕获(SQLE异常){
...

结论?
PreparedStatement
s正在使用中,根本不需要担心。

在DbUtils中使用PreparedStatement,但是,PreparedStatement的要点不是每次更新时都准备一个语句,并且只更改参数就重用它。假设您必须插入1000条记录,您希望重用相同的prepared语句仅更改参数。为此,请使用QueryRunner.batch而不是QueryRunner.update。

准备好的语句用于DbUtils中,但是,准备好的语句的要点不是每次更新时准备一条语句,并且只更改参数就重用它。假设您必须插入1000条记录,您希望重用它同一条准备好的语句仅更改参数。要执行此操作,请使用QueryRunner.batch而不是QueryRunner.update。

查看,您会注意到它们确实存在(查看
query
update
insert
的主要实现)。或者您想为这些方法提供
PreparedStatement
的现有实例吗?是的,我注意到了。这对我来说太多了,所以我现在正在研究。我以前使用过Prepared语句,但没有使用这些QueryRunner方法。这是我想做的,所以当我处理表单输入时,它会这样做esn不会因为省略号而崩溃。看一下,您会发现它们确实崩溃了(看一下
query
update
insert
的主要实现)。或者您想为这些方法提供
PreparedStatement
的现有实例吗?是的,我注意到了。这对我来说太多了,所以我现在正在研究。我以前使用过Prepared语句,但没有使用这些QueryRunner方法。这是我想做的,所以当我处理表单输入时,它会这样做esn不会因撇号而崩溃。但是,如果插入一百万条记录,我高度怀疑dbutils是否是解决方案,因为QueryRunner.batch会初始化准备好的语句。我建议编写自定义实现,而不是诉诸dbutils。我不确定是否有其他工具缓存准备好的语句。但是,如果插入了一百万条记录,我非常怀疑dbutils是否是解决方案,因为QueryRunner.batch会初始化准备好的语句。我建议编写一个自定义实现,而不是使用dbutils。我不确定是否有其他工具缓存准备好的语句。
// Execute the query and get the results back from the handler
Object[] result = run.query(
    "SELECT * FROM Person WHERE name=?", h, "John Doe");
private <T> T query(Connection conn, boolean closeConn, String sql, 
                     ResultSetHandler<T> rsh, Object... params)
...
PreparedStatement stmt = null;
ResultSet rs = null;
T result = null;

try {
    stmt = this.prepareStatement(conn, sql);
    this.fillStatement(stmt, params);
    rs = this.wrap(stmt.executeQuery());
    result = rsh.handle(rs);
} catch (SQLException e) {
...