当前位置: 首页 > 面试题库 >

在使用Datastax Cassandra驱动程序时是否重新使用PreparedStatement?

万俟浩
2023-03-14
问题内容

我目前正在使用Cassandra 2的Datastax
Cassandra驱动程序来执行cql3。这可以正常工作。我开始使用PreparedStatement's

Session session = sessionProvider.getSession();
try {
    PreparedStatement ps = session.prepare(cql);
    ResultSet rs = session.execute(ps.bind(objects));
    if (irsr != null) {
       irsr.read(rs);
    }
}

有时我会在日志中从驱动程序得到警告:

Re-preparing already prepared query . Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.

此警告是有道理的,但我不确定如何重用PreparedStatement

我应该只PreparedStatement在构造函数/ init方法中创建所有我的函数,而不是简单地使用它们吗?

但是,当多个线程同时使用同一线程PreparedStatement时(尤其是调用PreparedStatement.bind()绑定对象),这样做是否很好?


问题答案:

您可以只初始化一次PreparedStatement,然后在应用程序运行时对其进行缓存。只要Cassandra群集启动,它就应该可以使用。

使用来自多个线程的语句很好(只要您不通过setXXX()方法修改它即可)。当您调用bind()时,下面的代码仅读取PreparedStatement,然后创建BoundStatement()的新实例,然后调用者线程可以随意对其进行突变。

如果您有兴趣(搜索bind()),请参见以下源代码。



 类似资料:
  • 我目前正在使用Cassandra 2的Datastax Cassandra驱动程序来执行cql3。这是正确的。我开始使用准备声明的: 有时我会在日志中收到司机的警告: 这个警告很有道理,但我不确定应该如何重用? 我是否应该在构造函数/初始化方法中创建我所有的准备语句,而不是简单地使用它们? 但是,当多个线程同时使用相同的时(特别是调用来绑定对象),这种情况会很好吗?

  • 我试图使用servlet上的Java驱动程序连接到托管在mlab上的MongoDB数据库。 问题是我得到以下错误: 这样做对吗?我还应该做什么/代替吗?

  • 问题内容: 我正在尝试使用servlet上的Java驱动程序连接到mlab上托管的MongoDB数据库。 问题是我遇到以下错误: 我看了一个答案(如何解决ClassNotFoundException:com.mongodb.connection.BufferProvider?),该答案向我强调了我需要其他jar,自从我下载了这些jar之后,仍然出现此错误。 我正在使用Eclipse并将这三个jar

  • TL;DR:同时使用Hive和MySql JDBC有问题吗? 我正在开发一个应用程序,它使用MySql JDBC驱动程序执行多个SQL查询,然后它还使用Hive JDBC发送另一个Hive查询。 现在发生的情况是,MySql查询正常工作,当代码尝试执行配置单元查询时,它会抛出以下异常: 现在,在抛出这个异常之后,查询将正确执行。 我的猜测是,由于我同时加载了MySql和Hive驱动程序,MySql

  • 如何将Crystal Reports与ucanaccess jdbc驱动程序一起使用?我得到“未找到驱动程序”错误。我将ucanaccess jar文件复制到程序文件(C:\program files(x86)\Business objects\common\3.5\java)中的业务对象,编辑了crconfig.xml文件,并且已经在Crystal Reports中配置了JDBC(JNDI)。M

  • 我有一份spark流媒体工作,我正试图由spark-k8运营商提交。我始终保持重启策略。但是,手动删除驱动程序时,驱动程序不会重新启动。我的yaml: Spark版本:2.4.5 apiVersion:“sparkoperator.k8s.io/v1beta2” 我遵循的步骤: 通过kubectl apply-f示例/spark测试创建资源。亚马尔。Pod创建成功。手动删除驱动程序。 预期行为:将