我将执行查询并使用com.sun.rowset.CachedRowSetImpl将结果返回给用户(不在我的控制范围内)。我想确保他们不会对此对象执行任何可在数据库中进行更改的更新操作。
一种方法是:


扩展CachedRowSetImpl并覆盖setReadOnly()方法,以便没有用户可以将其设置为false。


这够了吗?还是有其他方法可以使用户仍然更新数据库?我还应该重写clone()方法吗?

谢谢

最佳答案

我看不到覆盖clone()的理由,但是确保没有更新发生的最简单方法似乎是使用ResultSet.CONCUR_READ_ONLY

Javadoc中可以看到,在这种情况下,所有更改器都会引发SQLException。

因此,要创建一个只读的缓存行集,以下内容就足够了:

CachedRowSet rowSetImpl = new CachedRowSetImpl();
rowSetImpl.setConcurrency(ResultSet.CONCUR_READ_ONLY);
rowSetImpl.setCommand("Select * from foo");
rowSetImpl.execute();

10-05 17:56