0

Cassandra への挿入の単純なクエリの次のコードがあります。通常のステートメントはテーブルのタイムスタンプ列にタイムスタンプを挿入できないため、ここで準備済みステートメントを使用しようとしていますtime_demo

      CassFuture* connect_future = NULL;
      CassCluster* cluster = cass_cluster_new();
      CassSession* session = cass_session_new();
      char* hosts = "127.0.0.1";

      time_t rt= time(NULL);
      struct tm * timeinfo;

      timeinfo = localtime ( &rt );
      char lt[20];
      strftime(lt, sizeof(lt), "%Y-%m-%d %T", timeinfo);

      /* Add contact points */
      cass_cluster_set_contact_points(cluster, hosts);

      /* Provide the cluster object as configuration to connect the session  with a specified keyspace*/
      connect_future = cass_session_connect_keyspace(session, cluster,"test_keyspace");

      //After this line program exits
      CassFuture* prepare_future
          = cass_session_prepare(session, "INSERT INTO time_demo(id,time) VALUES(now(),?);");

最後の行の後、私のプログラムは突然終了します。test_keyspace準備済みステートメントも使用しながら、キースペースに接続したかったのです。コードを適切に記述していないため、プログラムが終了していると推測しています。

ここで私が犯した間違いを誰か指摘してもらえますか? C 用の Cassandra 2.13 ドライバーを使用しています。

4

1 に答える 1

1

接続が確立されるまで待つ必要があります。最も簡単な方法は、次のようなものを使用することです。

CassError rc = cass_future_error_code(connect_future);

ドライバーから OK が得られたら、クエリの準備を開始できますが、準備の結果を待つ必要もありますcass_future_error_code

それ以外の場合は、2 つの非同期操作を起動し、結果を待たずにプログラムを終了します。C/C++ ドライバーは設計上非同期です。正しく使用する方法については、入門ドキュメントを参照してください。

于 2019-09-06T11:45:23.087 に答える