Collection Contents 上一页 下一页 PDF

UltraLite C/C++ 用户指南

使用 UltraLite C++ 组件开发应用程序

连接到数据库


UltraLite 应用程序必须先连接到数据库,然后才能对数据库中的数据进行操作。本节将介绍如何连接到 UltraLite 数据库。在 Samples\UltraLite\CustDB 中可找到示例代码。

使用 Connection 对象 

Connection 对象的以下属性控制全局应用程序行为。

有关 Connection 对象的详细信息,请参见类 UltraLite_Connection

连接到 UltraLite 数据库

  1. 使用 UltraLite 命名空间。

    使用 UltraLite 命名空间将允许您为 C++ 组件接口中的类使用简单名称。

    using namespace UltraLite;
  2. 创建并初始化一个 DatabaseManager 对象和一个 UltraLite SQL 通信区 (ULSqlca)。ULSqlca 是一个处理应用程序和数据库之间通信的结构。

    DatabaseManager 对象位于对象层次结构的根部。对于每个应用程序,只应创建一个 DatabaseManager 对象。通常,最好将 DatabaseManager 对象声明为应用程序范围内的全局对象。

    ULSqlca sqlca;
    sqlca.Initialize();
    DatabaseManager * dbMgr = ULInitDatabaseManager(sqlca);

    有关详细信息,请参见类 UltraLite_DatabaseManager_iface

    在 Palm OS 中,调用 ULInitDatabaseManager 之前,应该先调用 ULEnableFileDB 或 ULEnablePalmRecordDB。这就将数据库存储设置为使用 Palm 数据存储或虚拟文件系统。有关详细信息,请参见 ULEnablePalmRecordDB 函数ULEnableFileDB 函数

  3. 声明 Connection 对象。

    大多数应用程序都使用一个与 UltraLite 数据库的连接,并使该连接保持打开状态。只有多线程数据访问才需要多个连接。因此,通常最好将 Connection 对象声明为应用程序范围内的全局对象。

    Connection *  conn = UL_NULL;

    有关详细信息,请参见类 UltraLite_Connection_iface

  4. 打开与现有数据库的连接,或者,如果指定的数据库文件不存在,创建一个新数据库。

    大多数 UltraLite 应用程序都部署模式文件而不是数据库文件,并让 UltraLite 在第一次尝试连接时创建数据库文件。因此,以下代码尝试连接到现有数据库。如果数据库文件不存在,应用程序将创建数据库文件。

    // specify the location of the database file
    static ul_char * parms = "file_name=mydata.udb";
    ULValue lp( parms );
    conn = dbMgr->OpenConnection( sqlca, lp );
    if( sqlca.GetSQLCode() == 
      SQLE_ULTRALITE_DATABASE_NOT_FOUND ) {
      static ul_char * parms = UL_TEXT("schema_file=mydata.usm")
      UL_TEXT(";file_name=mydata.udb");
      ULValue lp( parms );
      conn = dm->CreateAndOpenDatabase( sqlca, lp );
      if( sqlca.GetSQLCode() < SQLE_NOERROR ){
        printf( "Open failed with sql code: %d.\n" ,
        sqlca.GetSQLCode() );
      }
    }

    有关详细信息,请参见 OpenConnection 函数CreateAndOpenDatabase 函数

示例 

以下代码用于打开到一个名为 mydata.udb 的 UltraLite 数据库的连接。

#include "uliface.h"
using namespace UltraLite; 
static ul_char *  parms =
UL_TEXT( ";file_name=tutcustomer.udb"  )
UL_TEXT( ";schema_file=tutcustomer.usm" );
ULSqlca sqlca;
DatabaseManager * dm   = UL_NULL;
Connection *   conn   = UL_NULL;
sqlca.Initialize();
dm = ULInitDatabaseManager( sqlca );
if( dm == UL_NULL ){
   // You may have mismatched UNICODE vs. ANSI runtimes.
   return 1;
}
ULValue  lp( parms );
conn = dm->OpenConnection( sqlca, lp );
if( sqlca.GetSQLCode() == 
    SQLE_ULTRALITE_DATABASE_NOT_FOUND ) {
   conn = dm->CreateAndOpenDatabase( sqlca, lp );
   if( sqlca.GetSQLCode() < SQLE_NOERROR ) {
      printf( "Open failed with sql code: %d.\n" , 
      sqlca.GetSQLCode() );
      return NULL;
   }  else {
      printf( "Connected to a new database.\n" );
   }
} else {
   printf( "Connected to an existing database.\n" );
}
return( conn );
多线程应用程序 

每个 Connection 对象以及从该对象中创建的所有对象都应该在单个线程中使用。如果您的应用程序需要使用多个线程访问 UltraLite 数据库,则每个线程都需要一个单独的连接。


Collection Contents 上一页 下一页 PDF