Java JDBC Connection类允许设置一个名为readOnly的参数,但是它的用途是什么?
readOnly用于将连接置于只读模式
此属性控制从池获得的连接是否为默认情况下处于只读模式。请注意,某些数据库不支持只读模式的概念,而其他模式则提供查询优化当“连接”设置为只读时。是否需要这个属性与否很大程度上取决于您的应用程序和数据库。默认值:false
但是,只读模式下的连接是什么?什么概念?仅允许SELECT语句的连接?
只读连接对PostgreSQL JDBC驱动程序有好处吗?
您可以在github上浏览PostgreSQL JDBC驱动程序。 Connection.setReadOnly的实现指示在调用该方法时,会将以下SQL语句之一发送到数据库:
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
或
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
现在,如果我们要阅读PostgreSQL reference,它将指定:
事务访问模式确定事务是读/写还是只读。读/写是默认设置。当事务为只读时,不允许使用以下SQL命令:INSERT,UPDATE,DELETE和COPY FROM(如果要写入的表不是临时表);所有的CREATE,ALTER和DROP命令;注释,授予,撤销,截断;和EXPLAIN ANALYZE和EXECUTE(如果它们将执行的命令在列出的命令中)。这是只读的高级概念,不会阻止所有对磁盘的写入。
所以基本上,主要的好处是您将无法意外修改数据。它类似于使用Collections.unmodifiableList
,通常会导致代码更健壮,因此,如果您确定给定的事务应该是只读的,请使用该属性。