mco_db_xml_import
从到外部文件导入数据库映像。
此函数从输入流中导入数据库数据。运行时会调用应用程序定义的处理程序来管理输入流。应用程序负责以正确的模式打开输入流以读取二进制数据,并确保有足够的内存来容纳数据库。
有关详细信息,请参阅控制结构流式读取器。
MCO_RET mco_db_xml_import(
/*IN*/ mco_trans_h t,
/*IN*/ void *stream_handle,
/*IN*/ mco_stream_read input_stream_reader
);
参数
t
mco_trans_h
由 mco_trans_start()
函数返回的 mco_trans_h
事务句柄。
stream_handle
void *
输入流的句柄。
input_stream_reader
mco_stream_read
运行时调用的用于读取输入的处理函数。
返回
MCO_S_OK
已成功关闭数据库。
MCO_E_NOINSTANCE
指定的数据库未打开。
MCO_E_NOMEM
分配工作内存时内存不足。
MCO_E_LOAD_DATA
XML 标签未闭合或引号不匹配。
示例
/* 应用程序代码片段 */
mco_size_sig_t file_reader( void *stream_handle /* FILE * */, /* OUT */void *to, mco_size_t max_nbytes )
{
FILE *f = (FILE *)stream_handle;
mco_size_sig_t nbs;
nbs = fread( to, 1, max_nbytes, f );
return nbs;
}
int main(int argc, char** argv)
{
mco_db_h db;
MCO_RET rc;
mco_device_t dev;
mco_db_params_t db_params;
mco_trans_h t;
FILE * f;
…
if( (rc = mco_runtime_start()) != MCO_S_OK)
exit(-1);
rc = mco_db_open_dev( dbname, simple_get_dictionary(), &dev, 1, &db_params );
if ( MCO_S_OK != rc )
{
rc = mco_db_connect(dbname, &db);
...
/* Import database */
f = fopen( "db.xml", "rb" );
if ( f == 0 )
{
printf( "\n\t Can't open input file for streaming\n");
}
else
{
rc = mco_trans_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t);
if ( MCO_S_OK == rc )
{
rc = mco_db_xml_import( t, f, file_reader );
if ( MCO_S_OK == rc )
{
rc = mco_trans_commit( t );
...
}
fclose( f );
...
}
}
...
}
}
文件
- 头文件:
mcoxml.h
- 源文件:
mcoxpars.c
- 库:
libmcolib.a