另一个用于 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 日更新下载