Sql 伯克利DB等效于SELECT COUNT(*)All,SELECT COUNT(*),其中类似于“%…%”&引用;
我正在寻找伯克利DB的等价物Sql 伯克利DB等效于SELECT COUNT(*)All,SELECT COUNT(*),其中类似于“%…%”&引用;,sql,berkeley-db,Sql,Berkeley Db,我正在寻找伯克利DB的等价物 SELECT COUNT All, SELECT COUNT WHERE LIKE "%...%" 我有100张有钥匙的唱片:1,2,3。。。100. 我有以下代码: //Key = 1 i=1; strcpy_s(buf, to_string(i).size()+1, to_string(i).c_str()); key.data = buf; key.size = to_string(i).size()+1; key.flags = 0; data.data
SELECT COUNT All, SELECT COUNT WHERE LIKE "%...%"
我有100张有钥匙的唱片:1,2,3。。。100.
我有以下代码:
//Key = 1
i=1;
strcpy_s(buf, to_string(i).size()+1, to_string(i).c_str());
key.data = buf;
key.size = to_string(i).size()+1;
key.flags = 0;
data.data = rbuf;
data.size = sizeof(rbuf)+1;
data.flags = 0;
//Cursor
if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
dbp->err(dbp, ret, "DB->cursor");
goto err1;
}
//Get
dbcp->get(dbcp, &key, &data_read, DB_SET_RANGE);
db_recno_t cnt;
dbcp->count(dbcp, &cnt, 0);
cout <<"count: "<<cnt<<endl;
//键=1
i=1;
strcpy_s(buf,to_string(i).size()+1,to_string(i).c_str());
key.data=buf;
key.size=to_字符串(i).size()+1;
key.flags=0;
data.data=rbuf;
data.size=sizeof(rbuf)+1;
data.flags=0;
//光标
if((ret=dbp->cursor(dbp,NULL,&dbcp,0))!=0){
dbp->err(dbp,ret,“DB->cursor”);
后藤err1;
}
//得到
dbcp->get(dbcp,&key,&data\u read,DB\u SET\u RANGE);
db_recno_t cnt;
dbcp->count(dbcp,&cnt,0);
cout您期望Berkeley DB比实际更高级别。它不包含任何你想要的东西。如果您想要类似于“%1%”的WHERE字段
,您必须创建一个光标,读取数据库中的所有值,然后自己进行字符串比较以找出匹配的值。这就是SQL引擎实现查询的实际功能,如果您使用的是libdb而不是SQL引擎,则由您决定。如果希望更快地完成,可以使用辅助索引(就像可以在SQL中为表创建其他索引一样),但必须提供一些代码将辅助索引链接到主数据库
DB\u SET\u RANGE
有助于优化一个非常特定的情况:您正在查找其键以特定子字符串开头的项。您可以DB\u SET\u RANGE
找到第一个匹配的键,然后DB\u NEXT
通过匹配找到匹配的键,并在获得不匹配的键时停止。这只适用于DB_BTREE
数据库,因为它取决于按词法顺序返回的键
count方法告诉您当前光标位置的项目有多少个精确的重复键。您可以使用该方法
例如,BT_树中唯一键的数量
bool row_amount(DB *db, size_t &amount) {
amount = 0;
if (db==NULL) return false;
DB_BTREE_STAT *sp;
int ret = db->stat(db, NULL, &sp, 0);
if(ret!=0) return false;
amount = (size_t)sp->bt_nkeys;
return true;
}