65.9K
CodeProject 正在变化。 阅读更多。
Home

另一个用于 C++ 的嵌入式数据库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (17投票s)

2004 年 8 月 1 日

BSD

2分钟阅读

viewsIcon

168603

downloadIcon

4480

SQLite 数据库的 C++ 包装器。

引言

这是著名的 SQLite 数据库引擎的另一个封装。是的,我知道 CppSQLite。 它是 SQLite 的一个很棒的封装。 我并不声称我的代码在某些方面优于 CppSQLite。 但是,如果您已经了解 JDBC API,那么您会发现我的库非常容易且直接使用。

使用代码

让我们直接进入一些示例代码片段,这些代码片段将帮助您立即开始使用这些类。 要创建或打开数据库,请使用 Connection 类的 open() 函数。

Connection conn;
conn.open("mydb"); // the argument is the database name.

要执行 SQL 命令,请获取 Statement 对象的句柄。 调用 execute() 函数来执行除 SELECT 之外的所有 SQL 命令。execute() 函数将返回受查询影响的行数。

Statement* stmt = conn.createStatement();
stmt->execute("create table albums(title,artist)"); // creates a table
stmt->execute(
 "insert into albums values('Brothers in Arms','Dire Straits')");
    // insert some data
stmt->execute("insert into albums values('Unplugged','Eric Clapton')");

要执行 SELECT 语句,请使用 executeQuery() 函数。 此函数返回 ResultSet 的句柄。 使用 next() 函数在 ResultSet 中导航。 ResultSet 类有许多 getXXX() 函数,它们将列号作为参数,并以指定的类型返回该列的值。 不同的 getXXX() 函数有

  • std::string getString(int colNum)
  • int getInt(int colNum)
  • long getLong(int colNum)
  • unsigned int getUInt(int colNum)
  • unsigned long getULong(int colNum)
  • float getFloat(int colNum)
  • double getDouble(int colNum)
  • bool getBoolean(int colNum)

ResultSet 具有嵌入其中的 ResultSetMetaData 对象。 我们可以通过调用 getMetaData() 获取此对象的句柄。 ResultSetMetaData 包含诸如 ResultSet 中的列数、它们的名称和数据类型等信息。

ResultSet* rslt = stmt->executeQuery("select * from albums");
ResultSetMetaData* r_mtdt = rslt->getMetaData();
int cols = r_mtdt->getColumnCount();
while(rslt->next()) {
  for(int i=0;i<cols;i++) {
    printf("%s (%s): %s  ",r_mtdt->getColumnName(i+1).c_str(),
    r_mtdt->getColumnType(i+1).c_str(),rslt->getString(i+1).c_str());
  }
  printf("\n");
}

DatabaseMetaData 类包含整个数据库的元数据。 我们可以通过调用 Connection 类的 getDatabaseMetaData() 函数来获取 DatabaseMetaData 句柄。

如果您想要最新的数据库元数据,请首先调用 refreshMetaData() 函数。

conn.refreshMetaData();
if(conn.getDatabaseMetaData()->doesObjectExist("albums","table")) 
    // check to see if a table exists
  stmt->execute("drop table albums");// delete it if it exists

DatabaseMetaData 包含以下信息

  • 数据库中对象的数量。
  • 每个对象的名称
  • 每个对象的类型(表,索引

我们可以使用 doesObjectExist() 函数来检查数据库中是否存在对象。 此函数的第一个参数是对象的名称,第二个参数是其类型。 它可以是“table”或“index”。

关注点

  1. 要使用此库,请包含头文件 dsqlxprez_2.h 并将您的项目与 sqlite3.lib 链接
  2. 始终将数据库调用括在捕获 SQLException 的 try - catch 块中
  3. 库中的所有类都属于名为 dsqlxprez 的命名空间中。 (DSQL 代表 DarkSide SQL。 只是一个名字,仅此而已!!)
  4. 您不必显式地在 Connection 对象上调用 close() 函数。 当执行 Connection 对象的析构函数时,库会自动删除所有资源。

历史

  • 创建于 2004 年 7 月 26 日。
  • 2007 年 1 月 14 日更新下载
© . All rights reserved.