當前位置:首頁 » 數據倉庫 » otl連接資料庫
擴展閱讀
怎麼清除預覽圖片的緩存 2022-11-30 14:15:11
c語言創建有序鏈表 2022-11-30 14:08:06

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用戶實例是必要的。