快速入门
SmartESQL C 语言 API 允许开发人员调用底层 C 函数来初始化、打开和关闭 SQL 引擎,并直接执行语句(无需使用 C++ 包装类)。初始化完成后,SQL 引擎将传递给函数 mcosql_execute_statement()
以执行 SQL 插入、更新和删除语句,并传递给函数 mcosql_execute_query()
以执行数据库查询。以下部分将逐步介绍构建一个简单的 C SmartESQL 应用程序的步骤。另外,请注意有许多 C SDK 示例演示了 SmartESQL 的特定功能。
数据库定义
对于 C 应用程序,数据库本身在外部模式文件中定义,并由 mcocomp 编译以生成特定于模式的数据库接口文件,这些文件将包含在我们的 C 项目中。对于此示例应用程序,我们将使用模式文件 schema.mco
,如下所示:
declare database persondb;
class Person
{
string name;
unsigned<4> ordinal;
autoid[1000];
tree<name> pk;
};
我们运行 mcocomp 来编译指定 -sql
选项的模式,如下所示:
SmartEDB/host/bin/mcocomp -sql schema.mco
这会生成文件 persondb.h
,我们将在应用程序源文件 main.c
中包含它,还会生成 persondb.c
,该文件将被编译并链接到我们的应用程序中。
为 SQL 访问打开数据库
要为 SQL 访问打开数据库,我们首先创建一个内存数据库,并像任何 SmartEDB 应用程序那样连接到它。然后,我们将数据库连接句柄传递给 mcoapi_create_engine()
函数,该函数初始化 SQL 接口句柄引擎。(为避免使此示例变得过于复杂,我们将隐藏这些细节,只需调用 initialize_db()
函数来执行初始数据库创建和连接。)
要完成此步骤,我们将调用 mcoapi_destroy_engine()
来终止 SQL 数据库接口。到目前为止,main.c
的示例代码如下所示:
#include "persondb.h"
const char * db_name = "persondb";
#define DATABASE_SIZE 100 * 1024 * 1024
#define MEMORY_PAGE_SIZE 256
int main(int argc, char* argv[])
{
MCO_RET rc;
mco_db_h db;
database_t engine;
rc = initialize_db(&db, db_name, DATABASE_SIZE, MEMORY_PAGE_SIZE);
if ( MCO_S_OK == rc )
{
rc = (MCO_RET)mcoapi_create_engine(db, &engine);
if ( MCO_S_OK == rc )
{
/* Do database processing ... */
/* Destroy the SQL engine and disconnect from and close database */
rc = (MCO_RET)mcoapi_destroy_engine( engine );
}
rc = mco_db_disconnect(db);
rc = mco_db_close(db_name);
}
}
操作数据库
要填充数据库,我们通过调用 mcosql_execute_statement()
函数执行一些 SQL 插入语句,如下所示:
rc = (MCO_RET)mcosql_execute_statement(engine, NULL, NULL, "insert into Person values('Luke Skywalker', 0)");
rc = (MCO_RET)mcosql_execute_statement(engine, NULL, NULL, "insert into Person values('Han Solo', 1)");
然后,要查询数据库,我们调用 mco_execute_query()
以返回 data_source_t
结构的结果:
data_source_t result = NULL;
rc = (MCO_RET)mcosql_execute_query(engine, NULL, &result, "select * from Person") );
处理查询结果
从 mcosql_execute_query()
返回的 data_source_t
结构是一个数据集,针对此数据集有众多用于提取结果行和有关列的信息等的函数。但介绍这些细节超出了本快速入门演示的范围。
有关详细信息,请参阅查询结果处理,并查看 SQL_C SDK 示例。