我试图从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语句。


该代码正在运行,并且可以正确更新视图。

我是否丢失了某些东西,或者文档是否不太清楚executed()和executeUpdate()之间的区别?

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

最佳答案

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

关于java - Java execute()与executeUpdate()刷新Postgresql中的实例化 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60657384/

10-16 18:51