7

com.datastax.driver.core.PreparedStatement 实例应该是应用程序中的单例吗?

如果是这样,如果连接丢失会发生什么?PreparedStatement 是否变得无效并且必须采取手动操作来“重新准备”?

PreparedStatement 用法的简单示例(除了以相同的方法准备+执行)会很棒!

4

1 回答 1

8

PreparedStatement 对象是线程安全的。如果多个线程同时执行此操作,您可以以可能导致不一致的方式对它们进行变异(例如设置默认一致性级别),但这是另一回事。

准备好的语句基本上是围绕 ID 和元数据的包装器,只要准备好的语句启动,服务器就会保留它(但节点崩溃或重新启动将意味着它丢失并且必须重新准备)。理论上,准备好的语句可以在其他地方进行序列化和反序列化并且仍然有效,但我不推荐它。

准备好的语句对于节点来说是本地的,正如我所提到的,重启后不会继续存在,所以如果你要保留它们,你需要确保在连接失败或节点重启时清除它们。我会尝试以与您确定连接范围相同的方式来确定它们的范围,在连接和重新连接时重新创建它们。也许不是很好的建议,但这在很大程度上取决于您的应用程序的结构。

于 2013-05-12T15:08:05.713 回答