是否有更快(更简洁)的方法来为 JDBC 中的 PreparedStatements 设置许多参数?

Posted

技术标签:

【中文标题】是否有更快(更简洁)的方法来为 JDBC 中的 PreparedStatements 设置许多参数?【英文标题】:Is there a faster (more concise) way to set many parameters for PreparedStatements in JDBC? 【发布时间】:2021-11-10 17:51:19 【问题描述】:

在使用 JDBC 时,我遇到了一个包含很多列的表。我想知道是否有可能以比下面的方式更快、更有效的方式在 Prepared Statements 中设置参数(可能实现“临时”方法)。

public void create(FilmBean film) 
    try 
        String queryString = "Insert INTO film(film_id, title, description, release_year, language_id, original_language_id,"
                + " rental_duration, rental_rate, length, replacement_cost, rating, special_features, last_update) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,)";
        connection = getConnection();
        ptmt = connection.prepareStatement(queryString);
        ptmt.setInt(1, film.getFilmId());
        ptmt.setString(2, film.getFilmTitle());
        ptmt.setString(3, film.getDescription());
        ptmt.setInt(4, film.getReleaseYear());
        ptmt.setInt(5, film.getLanguageId());
        ptmt.setInt(6, film.getOriginalLanguageId());
        ptmt.setInt(7, film.getRentalDuration());
        ptmt.setFloat(8, film.getRentalRate());
        ptmt.setInt(9, film.getLength());
        ptmt.setFloat(10, film.getReplacementCost());
        ptmt.setString(11, film.getRating());
        ptmt.setString(12, film.getSpecialFeatures());
        ptmt.setTimestamp(13, film.getLastUpdate());
        ptmt.executeUpdate();
        System.out.println("Data Added Successfully");
     catch (SQLException e) 
        e.printStackTrace();
     finally 
        try 
            if (ptmt != null)
                ptmt.close();
            if (connection != null)
                connection.close();
         catch (SQLException e) 
            e.printStackTrace();
         catch (Exception e) 
            e.printStackTrace();
        
    

【问题讨论】:

通过“更快”,您实际上是在寻找更简洁的代码,还是在执行时性能改进?如果设置参数实际上是一个瓶颈,我会感到惊讶。 我的意思是简洁,抱歉没有具体说明。 只使用普通的 JDBC,答案可能是“否”。但是,您可以使用 ORM 为您工作;这将需要在开始时进行更多的设置工作,并且需要处理新的学习曲线。 【参考方案1】:

没有更简洁的方法可以在 JDBC 本身中设置参数。但是,有一些库可以为您简化这一过程。比如Spring的org.springframework.jdbc.core.JdbcTemplate,或者你可以切换到使用像Hibernate这样的ORM。

至于更快,没有什么更快。您在 Java 中使用的任何其他抽象最终都将使用 JDBC API,并且必然比直接使用 JDBC 慢。

【讨论】:

以上是关于是否有更快(更简洁)的方法来为 JDBC 中的 PreparedStatements 设置许多参数?的主要内容,如果未能解决你的问题,请参考以下文章

是否有更简洁的方法来获取错误和 Promise 的结果 [重复]

4种更快更简单实现Python数据可视化的方法

有没有更简洁的方法来编写这个轮询循环?

4种更快更简单实现Python数据可视化的方法

是否有更简洁的 linq 方式来“联合”单个项目?

是否有另一种方式(更有效的方式)来编写代码,以便它可以运行得更快?