JdbcTemplate
中execute(String sql)
和update(String sql)
之间的区别是什么?
如果我的语句是直的CRUD
而不是对象创建DDL(正如执行javadoc所暗示的那样),那么使用execute和看似更轻量级的更新是否有意义?
答案 0 :(得分:17)
如果方法调用成功且没有错误,方法execute(String sql)
将返回void
。 (参见execute(..) JavaDoc)。对于普通JDBC,它应该/可以用于定义数据库模式元素(DDL),例如使用 CREATE TABLE ... 语句。
相比之下,update(String sql)
通常用于对应于SQL INSERT / UPDATE / DELETE操作的DML语句。在这些操作数据的情况下,从程序员的角度来看,知道相应的DML操作添加/更改/删除了多少行是很重要的。
出于这个原因,update(...)方法会返回非负int
值,让您知道:
返回: 受影响的行数
由于JavaDoc在其描述中使用术语“通常”表示,但您可以使用execute(String sql)
来操作数据,而无需使用返回的int
值。理论上,对于某些DBMS实现,此调用可能会快一些纳秒,因为不需要传输返回值。
然而,从我个人和程序员的角度来看,你应该同时考虑DDL与DML语句之间的区别,因为它的性质update
表示正在进行数据操作操作。
希望,这有帮助。