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






4.71/5 (17投票s)
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”。
关注点
- 要使用此库,请包含头文件 dsqlxprez_2.h 并将您的项目与 sqlite3.lib 链接
- 始终将数据库调用括在捕获 SQLException的 try - catch 块中
- 库中的所有类都属于名为 dsqlxprez 的命名空间中。 (DSQL 代表 DarkSide SQL。 只是一个名字,仅此而已!!)
- 您不必显式地在 Connection对象上调用close()函数。 当执行 Connection 对象的析构函数时,库会自动删除所有资源。
历史
- 创建于 2004 年 7 月 26 日。
- 2007 年 1 月 14 日更新下载


