是否有更快(更简洁)的方法来为 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 设置许多参数?的主要内容,如果未能解决你的问题,请参考以下文章