一. 简介

OTL是一个纯C++的通用数据库连接模板库,可以支持各种当下流行的数据库,如Oracle,Sybase, MySQL, PostgreSQL, EnterpriseDB, SQLite,  MS ACCESS, Firebird等等.它是一个跨平台类库,在MS Windows, Linux/Unix/Mac OS X 都可以使用。

OTL使用简单, 只要头文件中包含有: #include "otlv4.h" 就可,实际上整个OTL就一个.H的文件,使用起来极为的方便。

我的下载空间:

代码:http://download.csdn.net/detail/u013354805/9057229

文档:http://download.csdn.net/detail/u013354805/9057243

案例:http://download.csdn.net/detail/u013354805/9057273

官方下载地址:http://otl.sourceforge.net/

二. 使用方法:

1. 首先指定要连接的数据库类型,OTL用宏定义来指定要连接的数据库类型。OTL会根据这个宏定义来初始化数据库连接的环境。

相关的宏定义列表:  http://otl.sourceforge.net/otl3_compile.htm

如: #define OTL_ODBC_MYSQL表示连接ODBC MySQL数据库。

2、案例:

1) 指定连接的数据库类型:

#define OTL_ODBC_MYSQL // 指定连接的数据库类型

2) 导入OTL 4 头文件

#include <otlv4.h> // include the OTL 4 header file


3) 定义数据库实例:

otl_connect db; // 定义数据库实例

4) 初始化ODBC环境:

otl_connect::otl_initialize();

5) 连接ODBC:

db.rlogon("UID=scott;PWD=tiger;DSN=mysql"); // connect to ODBC

6). 删除表格:

otl_cursor::direct_exec
   (
    db,
    "drop table test_tab",
    otl_exception::disabled // disable OTL exceptions
   ); // drop table

7). 创建表格:

otl_cursor::direct_exec
   (
    db,
    "create table test_tab(f1 int, f2 varchar(30))"
    );  // create table

8). Insert 语句:

// insert rows into table
 void insert()
{ 
	 otl_stream o(1, // buffer size should be == 1 always on INSERT
	              "insert into test_tab values(:f1<int>,:f2<char[31]>)", 
	                 // SQL statement
	              db // connect object
	             );
	 char tmp[32];

	 for(int i=1;i<=100;++i)
	 {
	  sprintf(tmp,"Name%d",i);
	  o<<i<<tmp;
	 }
}


9). Update 语句:

// update row data into table
void update(const int af1)
{ 
	 otl_stream o(1, // buffer size should be == 1 always on UPDATE
				  "UPDATE test_tab "
				  "   SET f2=:f2<char[31]> "
				  " WHERE f1=:f1<int>", 
					 // UPDATE statement
				  db // connect object
				 );
	 o<<"Name changed"<<af1;
	 o<<otl_null()<<af1+1; // set f2 to NULL
}

10). Select语句:

// MyODBC does not allow any input bind variables in the WHERE clause
// in a SELECT statement.
// Therefore, the SELECT statement has to be generated literally.
void select(const int af1)
{ 
	 char stmbuf[1024];
	 sprintf(stmbuf,
	         "select * from test_tab where f1>=%d and f1<=%d*2",
	         af1,
	         af1
	        );
	 otl_stream i(50, // buffer size may be > 1
	              stmbuf, // SELECT statement
	              db // connect object
	             ); 
	   // create select stream
	 
	 int f1;
	 char f2[31];

	 while(!i.eof())
	 { // while not end-of-data
		  i>>f1;
		  cout<<"f1="<<f1<<", f2=";
		  i>>f2;
		  if(i.is_null())
		   cout<<"NULL";
		  else
		   cout<<f2;
		  cout<<endl;
	 }

}

11). 断开ODBC:

db.logoff(); // disconnect from ODBC

12). 案例:

int main()
{
	 otl_connect::otl_initialize(); // initialize ODBC environment
	 try
	 {

		  db.rlogon("UID=scott;PWD=tiger;DSN=mysql"); // connect to ODBC
		  //  db.rlogon("scott/tiger@mysql"); // connect to ODBC, alternative format
		                                     // of connect string 

		  otl_cursor::direct_exec
		   (
		    db,
		    "drop table test_tab",
		    otl_exception::disabled // disable OTL exceptions
		   ); // drop table

		  otl_cursor::direct_exec
		   (
		    db,
		    "create table test_tab(f1 int, f2 varchar(30))"
		    );  // create table

		  insert(); // insert records into the table
		  update(10); // update records in the table
		  select(8); // select records from the table

	 }

	 catch(otl_exception& p)
	 { // intercept OTL exceptions
		  cerr<<p.msg<<endl; // print out error message
		  cerr<<p.stm_text<<endl; // print out SQL that caused the error
		  cerr<<p.sqlstate<<endl; // print out SQLSTATE message
		  cerr<<p.var_info<<endl; // print out the variable that caused the error
	 }

	 db.logoff(); // disconnect from ODBC

 return 0;

}

13). 运行结果:

Output

f1=8, f2=Name8
f1=9, f2=Name9
f1=10, f2=Name changed
f1=11, f2=NULL
f1=12, f2=Name12
f1=13, f2=Name13
f1=14, f2=Name14
f1=15, f2=Name15
f1=16, f2=Name16

Logo

更多推荐