diff --git a/src/db/db-mgr.hpp b/src/db/db-mgr.hpp
new file mode 100644
index 0000000..c6445af
--- /dev/null
+++ b/src/db/db-mgr.hpp
@@ -0,0 +1,109 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NDNS_DB_MGR_CPP
+#define NDNS_DB_MGR_CPP
+
+#include <sqlite3.h>
+#include <iostream>
+
+
+namespace ndn {
+namespace ndns {
+
+
+class DBMgr
+{
+public:
+  enum m_status
+  {
+    DBConnected,
+    DBClosed,
+    DBError
+  };
+
+public:
+  DBMgr();
+  virtual ~DBMgr();
+
+  void open();
+  void close();
+  void execute(std::string sql,
+        int (*callback)(void*,int,char**,char**), void * paras);
+
+  inline void addResultNum(){
+    m_resultNum += 1;
+  }
+  inline void clearResultNum() {
+    m_resultNum = 0;
+  }
+
+  const std::string& getDbfile() const {
+    return m_dbfile;
+  }
+
+  void setDbfile(const std::string& dbfile) {
+    this->m_dbfile = dbfile;
+  }
+
+  const std::string& getErr() const {
+    return m_err;
+  }
+
+  void setErr(const std::string& err) {
+    this->m_err = err;
+  }
+
+  int getReCode() const {
+    return m_reCode;
+  }
+
+  void setReCode(int reCode) {
+    this->m_reCode = reCode;
+  }
+
+  m_status getStatus() const {
+    return m_status;
+  }
+
+  void setStatus(m_status status) {
+    this->m_status = status;
+  }
+
+  int getResultNum() const {
+    return m_resultNum;
+  }
+
+  void setResultNum(int resultNum) {
+    m_resultNum = resultNum;
+  }
+
+
+private:
+  std::string m_dbfile;
+  sqlite3 *m_conn;
+  std::string m_err;
+  int m_reCode;
+  m_status m_status;
+  int m_resultNum;
+}; //class DBMgr
+}//namespace ndns
+}//namespace ndn
+
+#endif
