UltraLite 应用程序必须先连接到数据库,然后才能对数据库中的数据进行操作。本节将介绍如何连接到 UltraLite 数据库。在 Samples\UltraLite\CustDB 中可找到示例代码。
Connection 对象的以下属性控制全局应用程序行为。
提交行为 UltraLite C++ 组件中没有自动提交模式。每个事务后面必须跟上一条 Connection.Commit 语句。
有关详细信息,请参见管理事务。
用户鉴定 可以使用 [授予] 和 [撤消] 连接权限的方法将应用程序的用户 ID 和口令从其缺省值 DBA 和 SQL 更改为其它值。每个应用程序最多可以有四个用户 ID。
有关详细信息,请参见 UltraLite 中的用户鉴定和鉴定用户。
同步 可以通过 Connection 对象访问控制同步的一组对象。
有关详细信息,请参见同步数据。
表 使用 Connection 对象的方法可以访问 UltraLite 表。
有关详细信息,请参见使用 Table API 访问数据。
预准备语句 系统提供了一组对象来处理动态 SQL 语句的执行和浏览结果集。
有关详细信息,请参见 使用动态 SQL 访问数据。
有关 Connection 对象的详细信息,请参见类 UltraLite_Connection。
连接到 UltraLite 数据库
使用 UltraLite 命名空间。
使用 UltraLite 命名空间将允许您为 C++ 组件接口中的类使用简单名称。
using namespace UltraLite;
创建并初始化一个 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 函数。
声明 Connection 对象。
大多数应用程序都使用一个与 UltraLite 数据库的连接,并使该连接保持打开状态。只有多线程数据访问才需要多个连接。因此,通常最好将 Connection 对象声明为应用程序范围内的全局对象。
Connection * conn = UL_NULL;
有关详细信息,请参见类 UltraLite_Connection_iface
打开与现有数据库的连接,或者,如果指定的数据库文件不存在,创建一个新数据库。
大多数 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 数据库,则每个线程都需要一个单独的连接。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。