LibSDB官方资料 http://siag.nu/libsdb/  提供各个版本的source安装包下载, 说明文档, 一个demo
这个东西具有以下优点 :
1 小
2 原生c语言编写, 移植相对简单
3 采用类似jdbc这样的url连接各种数据库, 目前支持ODBC(cygwin), Lago,Mysql,Sqlite,Mimer,Postgresql,Oracle,Gdbm,MiniSQL 
4 openSource 这个就不多说了
缺点:
 暂时未发现获取字段名的接口, 我只能分析select语句的 字段列表,自己来维护
* query.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <unistd.h>
#include "common.h"
#include "sdb.h"
static int persistent = 0;
/*回调函数,获取查询数据的接口,用户提供
 *@ param int n 字段数
 *@ param char **p 结果集,全部为字符类型了,自己去做转换
 *@ param void *closure 出口参数, 结果集最终会通过这里返回,但是处理工作由你来做
*/
static int db_callback(int n, char **p, void *closure) {
  int i;
  char b[10];
  if (!n)
    return 0;
  sprintf(b, "%d ", n);
  printf("共%s个字段\t", b);        /* 列数 */
  for (i = 0; i < n; i++) {
    char *q = p[i];
    if (q == NULL)
       q = "";
    sprintf(b, "%ld ", (long)strlen(q));
    //printf("共%s位\t", b);  //打印数据长度
    printf("%s\t", q);
  }
  printf("\n");
  return 0;
}
int main(int argc, char **argv){
   char u[1024];
   char *db;
   char sqlstr[1024];
   if (argc < 1) {
     printf("Usage: sdb_client [options] url\n");
     exit(0);
   }
  //打开url指向数据库,
   db = sdb_open(argv[1]);
   if (db == NULL) {
     printf("sdb_open 失败");
   }
   sprintf(sqlstr,"SELECT %s, %s, %s, %s FROM %s "
                        "ORDER BY acttime ",
                        "acttime",
                        "seq_num",
                        "msg",
                        "connname",
                        "mtmsg");
   //查询 , 传递 db(数据库连接) , sqlstr (sql语句), db_callback(回调函数指针), 参数出口
   sdb_query(db, sqlstr, db_callback, NULL);
   if (db) sdb_close(db);
}
sdb_query原型:
 int sdb_query(char *url, char *query,int (*callback)(int, char **, void *), void *closure)
各种数据库对应的URL
 mysql:host=XXX:db=XXX:uid=XXX:pwd=XXX
 postgres:host=XXX:db=XXX:port=XXX
 oracle:uid=XXX:pwd=XXX OR oracle:uid=username/password@instance
 sqlite:db=/full/path/to/db
 lago:host=XXX:port=XXX:db=XXX:uid=XXX:pwd=XXX
 mimer:
 odbc:dsn=postgresql
 gdbm:db=foo.db