Java execute()vs executeUpdate()刷新Postgresql中的实例化视图

时间:2020-03-12 15:38:43

标签: java postgresql jdbc

我试图从Java程序刷新Postgresql中的实例化视图:

conn = AbstractClientDao.getJdbcConnection();
pst = conn.prepareStatement("REFRESH MATERIALIZED VIEW mv_my_materialized_view;");
pst.execute();
conn.close();

根据文档,execute()方法可用于任何类型的SQL语句:

在此PreparedStatement对象中执行SQL语句,可以是任何类型的SQL语句

注意:我不需要在程序的这一部分中了解结果,因此返回值并不重要。

此代码在数据库中未执行任何操作,物化视图未更新,但在Java程序中未引发任何错误/异常。 环顾了一下之后,我使用了相同的代码,但是使用了 executeUpdate()

conn = AbstractClientDao.getJdbcConnection();
pst = conn.prepareStatement("REFRESH MATERIALIZED VIEW mv_my_materialized_view;");
pst.executeUpdate();
conn.close();

从文档中,executeUpdate()也可用于任何类型的SQL:

在此PreparedStatement对象中执行SQL语句,该对象必须是SQL数据操作语言(DML)语句,例如INSERT,UPDATE或DELETE;或不返回任何内容的SQL语句,例如DDL语句。

此代码正常,并且可以正确更新视图。

我是否缺少某些东西,或者文档对 execute() executeUpdate()之间的区别不够清楚?

注意:Java8,Postgresql 9.6,驱动程序org.postgresql,版本9.3-1101-jdbc41

2 个答案:

答案 0 :(得分:0)

答案:此代码的两个版本之间没有区别。我的问题是由于数据库中的比赛条件造成的。

答案 1 :(得分:0)

有类似的问题。在物化视图创建脚本的末尾添加 WITH DATA 是我的问题。

<块引用>

PostgreSQL

CREATE MATERIALIZED VIEW my_mat_view
AS
SELECT * FROM my_table
WITH DATA
;
<块引用>

Java

entityManager
.createNativeQuery("REFRESH MATERIALIZED VIEW my_mat_view;")
.executeUpdate();