Невозможно добавить список к записи
Я пытаюсь добавить запись в базу данных, имеющую 3 ячейки, одна из которых представляет собой список с использованием моей программы на С ++ (я использую клиентскую библиотеку Aerospike's C), но после выполнения моей программы в нее добавляются только 2 ячейки запись. По некоторым причинам я не могу добавить третий бен, имеющий значение списка.
Ниже приведена программа:
#include<aerospike/aerospike.h>
#include<aerospike/as_arraylist.h>
#include <aerospike/as_record.h>
#include<aerospike/as_record_iterator.h>
#include <aerospike/as_policy.h>
#include<aerospike/aerospike_key.h>
#include<aerospike/as_std.h>
#include<aerospike/as_integer.h>
#include<aerospike/as_string.h>
#include<iostream>
#include<aerospike/as_hashmap.h>
#include<string>
using namespace std;
int main()
{
as_error err;
as_config config;
as_config_init(&config);
config.policies.write.key = AS_POLICY_KEY_SEND;
as_config_add_host(&config, "182.18.182.192", 3000);
aerospike as;
aerospike_init(&as, &config);
if(aerospike_connect(&as, &err)!=AEROSPIKE_OK)
{
printf("error(%d) %s at [%s:%d]", err.code, err.message, err.file, err.line);
}
as_key key;
as_record rec;
as_record_init(&rec, 2);
int n;
cout<<endl<<"Enter the number of records to enter: ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<endl<<"Enter the name: ";
string pk;
getline(cin>>ws,pk);
as_key_init(&key, "test", "vishal_set", pk.c_str());
cout<<endl<<"Enter the age: ";
int age;
cin>>age;
as_record_set_int64(&rec, "age", age);
cout<<endl<<"Enter the contact no: ";
string contact_no;
getline(cin>>ws,contact_no);
as_record_set_str(&rec, "contact_no", contact_no.c_str());
as_arraylist list;
as_arraylist_inita(&list,2);
as_arraylist_append_str (&list, "playing football");
as_arraylist_append_str (&list, "playing cricket");
cout<<endl<<"Number of elements in the list: "<<as_arraylist_size(&list)<<endl;
if(!(as_record_set_list(&rec, "hobbies", (as_list *)&list)))
{
printf("\n[%s::%d]Error\n",__FILE__,__LINE__);
}
if (aerospike_key_put(&as, &err,NULL, &key, &rec) != AEROSPIKE_OK)
{
printf("error(%d) %s at [%s:%d]", err.code, err.message, err.file, err.line);
}
}
if(aerospike_close(&as,&err)!=AEROSPIKE_OK)
{
printf("error(%d) %s at [%s:%d]", err.code, err.message, err.file, err.line);
}
aerospike_destroy(&as);
return 0;
}
1 ответ
К счастью, я нашел причину, по которой мой список сам не был добавлен в запись. Это оказалось действительно глупой ошибкой.
Причина в том, что я сделал ошибку в инициализации as_record
, Так как я добавил 3 записи в запись, я должен был инициализировать его как as_record_init(&rec, 3);
,