Note that there are some explanatory texts on larger screens.

plurals
  1. PONot able to retrieve values from Berkeley DB in C
    primarykey
    data
    text
    <p>I have two separate codes, one for inserting the data and one for retrieving the data in Berkeley DB using C. My problem is I am able to see that my data is stored and when I do a db->get immediately after db->put, I see the values. But when I try to do db->get via a separate code, I am having problems, the error I get is db->get: DB_NOTFOUND, when I don't use any delete function. Not sure where the error is</p> <p>Inserting data code: (I pass a string from some other function into it)</p> <pre><code>int db_json(char *json) { typedef struct { char data1[500]; } pearson_record; pearson_record s; int i =0; DB *dbp; DBT key, data; int ret, t_ret; int recno; if ((ret = db_create(&amp;dbp, NULL, 0)) != 0) { fprintf(stderr, "db_create: %s\n", db_strerror(ret)); exit (1); } if ((ret = dbp-&gt;open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) { dbp-&gt;err(dbp, ret, "%s", DATABASE); goto err; } printf("data: %s\n",json); strncpy(s.data1, json, strlen(json)+1); recno = 1; memset(&amp;key, 0, sizeof(key)); memset(&amp;data, 0, sizeof(data)); key.data = &amp;recno; key.size = sizeof(recno); data.data = &amp;s; data.size = sizeof(s); if ((ret = dbp-&gt;put(dbp, NULL, &amp;key,&amp;data,0)) == 0) printf("db: %d: key stored.\n", *(int *)key.data); else { dbp-&gt;err(dbp, ret, "DB-&gt;put"); goto err; } err: if ((t_ret = dbp-&gt;close(dbp, 0)) != 0 &amp;&amp; ret == 0) ret = t_ret; return 0; } </code></pre> <p>Retrieving data code:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;json/json.h&gt; #include &lt;curl/curl.h&gt; #include &lt;sys/types.h&gt; #include &lt;db.h&gt; #define DATABASE "mydata.db" int main() { typedef struct { char data1[500]; } pearson_record; pearson_record s; int i =0; DB *dbp; DBT key, data; int ret, t_ret; int recno; if ((ret = db_create(&amp;dbp, NULL, 0)) != 0) { fprintf(stderr, "db_create: %s\n", db_strerror(ret)); exit (1); } if ((ret = dbp-&gt;open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) { dbp-&gt;err(dbp, ret, "%s", DATABASE); goto err; } memset(&amp;key, 0, sizeof(key)); memset(&amp;data, 0, sizeof(data)); pearson_record *ppr; if ((ret = dbp-&gt;get(dbp, NULL, &amp;key, &amp;data, 0)) == 0) { ppr = (pearson_record *) data.data; printf("db: %d: key retrieved: data was %s %d\n", *(int *)key.data, ppr-&gt;data1, data.size); } else { dbp-&gt;err(dbp, ret, "DB-&gt;get"); } goto err; err: if ((t_ret = dbp-&gt;close(dbp, 0)) != 0 &amp;&amp; ret == 0) ret = t_ret; return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload