当前位置:首页 » 数据仓库 » otl连接数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

otl连接数据库

发布时间: 2022-09-25 07:53:36

A. OTL数据库查询的问题


你可以使用OTL library
OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle, MS sql Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。
在MS Windows and Unix 平台下,OTL目前支持的数据库版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI10g), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本为4.0,参见,下载地址。

OTL 的使用很简单,只需引用相应的头文件即可。
在它的网站有很多使用实例,你可以参考。

B. 你好,我想问下怎么在Linux下利用otl连接windows下的数据库

Linux下OTL连接Oracle数据库

#include <iostream>
using namespace std;

#define OTL_ORA10G //不可缺少
#include "otlv4.h" //注意OTL头文件位置

otl_connect db;

int main()
{
otl_connect::otl_initialize();
try
{
db.rlogon("user/passwd"); //连接本机数据库
if(db.connected)
cout<<"Connected to Database"<<endl;
}
catch(otl_exception& p)
{
cerr<<p.msg<<endl;
cerr<<p.stm_text<<endl;
cerr<<p.sqlstate<<endl;
cerr<<p.var_info<<endl;
}

db.logoff();
return 0;
}

上面是一段很挫的OTL连接Oracle数据库代码,只有连接没有其它操作。但是我在编译时遇到了些问题:会产生一坨错误提示,但其实真正问题不多。具体如下:(PS:我的Oracle 10g已经正确的安装在本地)

1. 首先是提示找不到"oci.h", 这个文件其实位于$ORACLE_HOME/rdbms/public下,解决方法有多种,可以g++编译时使用"-I"头文件路径,我是把路径添加到了CPLUS_INCLUDE_PATH这个环境变量中

2.继续编译会有如下错误提示

undefined reference to `OCIServerDetach'

undefined reference to `OCIHandleFree'

这是因为没有连接libclntsh.so这个库文件,这个文件位于$ORACLE_HOME/lib下,知道原因解决方法就很简单了,命令如下

g++ otl_example.cpp -lclntsh -L$ORACLE_HOME/lib

3.编译没有错误了 ,运行则提示“error while loading shared libraries:
libclntsh.so.10.1: cannot open shared object file: No such file or
directory”

解决方法:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

至此,这个小程序就可以正常运行了。(我的ORACLE_HOME:/oracle/oracle/proct/10.2.0/db_1)

C. 怎么样使用otl连接db2数据库

你可以使用OTL library
OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。
在MS Windows and Unix 平台下,OTL目前支持的数据库版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI10g), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本为4.0,参见,下载地址。

OTL 的使用很简单,只需引用相应的头文件即可。
在它的网站有很多使用实例,你可以参考。

D. 小弟使用OTL函数,动态拼凑SQL查询oracle数据库数据问题

OTL介绍:

OTL 是Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++操控关系数据库的模板库,最新版本4.0.104,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip。

优点:a. 跨平台

b. 运行效率高,与C语言直接调用API相当

c. 开发效率高,起码比ADO.net使用起来更简单,更简洁

d. 部署容易,不需要ADO组件,不需要.net framework 等

缺点:

a. 只有C++才可以使用她

b. 说明以及范例不足(暂时性的)

总的说来,对于C++程序员而言,使用OTL操作关系数据库是最好的选择,其网站上有很多的范例,本人在这里对使用OTL调用Oracle的存储函数(存储函数比存储过程多个返回值)作一个示范,而其他的比如查询、更新、存储过程等就太简单了,直接看otl.sourceforge.net的范例 。

Oracle 存储函数 TEST 代码:

( a In Integer, b Out Integer, c in out Integer, d In Long ) Return Long

is

begin

b := a;

c := 2 * c;

Return( '<' || d || '>' );

end;

说明:Oracle中的long不是C/C++中的长整型,而是varchar_long,对应着OTL中的otl_long_string,这是一种很复杂的类型,本人就用它来举例。

C++调用TEST的代码:

#include <string>

#include <iostream>

//#define OTL_ORA9I // 使用这个宏就表示使用Oracle9i的API,而不是ODBC API

#define OTL_ODBC // 使用这个宏就表示使用通用的ODBC API

#include "otlv4.h"

using namespace std;

void main( void )

{

otl_connect::otl_initialize();

try {

otl_connect db;

db.rlogon( "Driver={Microsoft ODBC for Oracle};Server=ZZZ;Uid=XXX;Pwd=YYY;" );

// db.set_max_long_size(?); 如果varchar_long长度非常长,超过默认值的话,你需要这一句

otl_stream o( 1, "{ :E<varchar_long,out> = call TEST( :A<int,in>,:B<int,out>,:C<int,inout>,:D<varchar_long,in&g t; ) }", db );

o.set_commit(0);

int a = 1;

int b = 0;

int c = 2;

otl_long_string d( "abc", 0, 3 );

otl_long_string e;

o << a << c << d;

o >> e >> b >> c;

cout << "b = " << b << 'n';

cout << "c = " << c << 'n';

cout << "e = " << e.v << 'n';

//db.commit();

db.logoff();

}

catch( otl_exception& p ) {

cerr << p.msg << "n"

<< p.stm_text << "n"

<< p.sqlstate << "n"

<< p.var_info << "n"

<< endl;

}

}

说明:"{ :E<varchar_long,out> = call TEST( :A<int,in>,:B<int,out>,:C<int,inout>,:D<varchar_long,in&g t; ) }"这一句中的A、B、C、D、E就是一个名字,随各人喜欢可写成其他任何名称。但这个格式需要注意,它不是

"{ call :Name1<int,out> := function( Name2<int,in> }"

也不是

"{ call :Name1<int,out> \:= function( Name2<int,in> }"

而是

"{ :Name1<int,out> = call function( Name2<int,in> }"

这一点和otl.sourceforge.net上的说明不一样。

E. 关于C++OTL的问题:如下

char *name;=>这个叫做指针(废话哈……)
boy[i].name=myf1;就是让指针指向了myf1的地址,
所以, cout<<boy[j].name<<":"<<boy[j].code<<endl;这里输出的是指针的地址,而不是指针所指的地址中的内容,可以试试 cout<<*boy[j].name
strcpy也可以的,前提是你要先给你的指针分配空间,还要注意字符串拷贝的时候不要内存越界,输出的时候也是*boy[j].name。

F. 求助,linux下,用C++ otlv4 连接mysql

1.测试在Linux下使用otl,所以程序里对数据库没有多少操作 testdb.cpp文件 #include using namespace std; //#define OTL_ODBC #define OTL_ODBC_MYSQL #define OTL_ODBC_UNIX #include "./otlv4.h" otl_connect db; int main() { //otl_connect:...

G. OTL可以用于连接PostgreSQL么

首先必须要引入PostgreSQL的JDBC驱动;然后,类似这样来连接PostgreSQL: package cmd01;import java.sql.*;public class Demo01 { public static void main(String[] args) { Connection con = null; Statement st = null; ResultSet rs = null; try { Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection("jdbc:postgresql://localhost/adsTextile", "adsuser", "siprma"); st = con.createStatement(); rs = st.executeQuery("select 100 as val"); while(rs.next()) { System.out.println("Value is: " + rs.getInt(1)); } System.out.println("Hello World!"); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } finally { if (rs != null) { try { rs.close(); } catch (Exception e1) { } } if (con != null) { try { con.close(); } catch (Exception e0) { } con = null; } } }}

H. OTL读取MySQL 数据库字符串乱码

我遇到了与你一样的问题,我的原因是查询出来的中文字段太长了,导致输出乱码。
解决方法是在查询的列名前加RTRIM。。。。。AS。。。。
如下形式:
RTRIM(columnName) AS columnName
这样就解决了。

I. Windows下使用OTL连接SQLServer数据库的连接字符串怎么写

连接数据库文件

1

<add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;AttachDBFilename=|DataDirectory|TimeTracker.mdf;User Instance=true" />

SqlConnectionStringBuilder实例化时,要用到connectionString,如:

1

SqlConnectionStringBuild builder = new SqlConnectionStringBuild(connectionString);

一、Data Source
SqlConnectionStringBuilder的DataSource属性,对应connectionString中的Data Source,“Data Source”可以由下列字符串代替:“server”,“address”,“addr”和“network address”。
Data Source=.\SQLExpress也可以写成这样Data Source=(local)\SQLExpress。

二、Integrated Security
SqlConnectionStringBuilder的IntegratedSecurity属性,对应connectionString中的Integrated Security,“Integrated Security”可以写成“trusted_connection”,为true时,使用当前的 Windows 帐户凭据进行身份验证,为false时,需要在连接中指定用户 ID 和密码。

三、AttachDBFilename
SqlConnectionStringBuilder的AttachDBFilename属性,对应connectionString中的AttachDBFilename,“AttachDBFilename”可以写成“extended properties”,“initial file name”。AttachDbFileName属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。这个属性可以接受数据库的完整路径和相对路径(例如使用|DataDirectory|语法),在运行时这个路径会被应用程序的App_Data目录所代替。

四、User Instance
SqlConnectionStringBuilder的UserInstance属性,对应connectionString中的User Instance ,该值指示是否将连接从默认的 SQL Server Express 实例重定向到在调用方帐户之下运行并且在运行时启动的实例。UserInstance=true,在这种情况下,SQLServerExpress为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。在ASP.NET应用程序中,这个用户是本地的ASPNET帐号或默认的NetworkService,这依赖于操作系统。为了安全地附加非系统管理员帐号(例如ASP.NET帐号)提供的数据库文件,建立一个独立的SQLServer用户实例是必要的。