Home >Database >Mysql Tutorial >C++类库:OTL连接MySQLODBC数据库(insert,update,select)_MySQL

C++类库:OTL连接MySQLODBC数据库(insert,update,select)_MySQL

WBOY
WBOYOriginal
2016-05-30 17:11:282038browse

一. 简介

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<
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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn