数据库连接
C 应用程序通过调用 mco_db_connect()
API 来连接数据库(创建数据库句柄)以创建连接句柄。数据库必须在此之前已打开,如果数据库位于共享内存中,则可能是在另一个进程中打开的。如果成功,mco_db_connect()
将返回一个数据库连接,该连接在后续对数据库 API 的调用中使用。
应用程序必须为访问数据库的每个线程(任务)创建单独的连接;数据库连接不能在不同的线程或任务之间共享。
一旦不再需要数据库连接,应用程序应立即断开与数据库的连接,以便数据库运行时能够释放用于维护该连接的内部资源。C 应用程序通过调用 mco_db_disconnect()
函数并传递数据库连接句柄来实现断开操作。断开连接后,为此数据库实例创建的所有事务句柄将失效。在所有活动连接关闭之前,数据库无法被销毁(即关闭)。
示例
连接到内存中数据库的典型应用程序代码如下所示:
#define DATABASE_SEGMENT_SIZE 300 * 1024
#define MEMORY_PAGE_SIZE 128
int main(int argc, char* argv[])
{
MCO_RET rc;
mco_device_t dev;
mco_db_params_t db_params;
mco_db_h db;
...
mco_runtime_start();
...
dev.type = MCO_MEMORY_CONV; /* 将设备设置为常规内存设备 */
dev.assignment = MCO_MEMORY_ASSIGN_DATABASE; /* 将该设备指定为主数据库内存 */
dev.size = DATABASE_SEGMENT_SIZE; /* 设置设备大小 */
dev.dev.conv.ptr = (void*)malloc( DATABASE_SEGMENT_SIZE ); /*分配内存并设置设备指针 */
...
mco_db_params_init ( &db_params );
db_params.mem_page_size = MEMORY_PAGE_SIZE; /* 设置内存部分的页面大小 */
db_params.disk_page_size = 0; /* 将页大小设置为零以禁用磁盘操作 */
db_params.db_max_connections = 1; /* 设置与数据库连接的总数 */
...
rc = mco_db_open_dev(db_name, convdb_get_dictionary(), &dev, 1, &db_params );
if ( MCO_S_OK == rc ) {
mco_db_connect(db_name, &db);
...
mco_db_disconnect(db);
mco_db_close(db_name);
}
...
mco_runtime_stop();
}