導航:首頁 > 編程語言 > otl編程

otl編程

發布時間:2022-05-15 14:40:02

『壹』 OTL操作資料庫如果資料庫語句錯誤怎麼判斷

請查api命令表,話說你得先學下sql的操作規范。

『貳』 vc6.0與oracle編程採用什麼方式最好

肯定最好使用otl(Oracle, Odbc and DB2-CLI Template Library),它直接用oracle提供的oci介面訪問oracle(直接調用oracle的API),採用流操作,速度最快,與C語言直接調用API相當。具體可查詢otlv4.168.h。
同時也是跨平台的,也不需要ADO組件以及.net framework 等

『叄』 VC中如何正確使用ADO

資料庫與資料庫編程:

『肆』 哪一種編程語言適合人工智慧

LISP:是一門高級的語言,在人工智慧中備受青睞,因為它具備垃圾收集、動態類型、數據函數、統一語法、互動式環境、可擴展性等特性,所以非常適合人工智慧編程。
PROLOG:提供了針對關於邏輯相關問題的解決方案,或者說它的解決方案有著簡潔的邏輯特徵,主要缺點就是學習起來很難。
C/C++:主要用於對執行速度要求很高的時候,它主要用於簡單程序,統計人工智慧,如神經網路就是一個常見的例子。
java:使用了LISP中的幾個理念,最明顯的就是垃圾收集,它的可移植性使它可以適用於任何程序,它還有一套內置類型,Java沒有LISP和Prolog高級,又沒有C那樣快,但如果要求可移植性它是最好的。
Python:是一種用LISP和Java編譯的語言,按照比較,這兩種語言彼此非常相似,僅有一些細小的差別;還有JPython,提供了訪問Java圖像用戶界面的途徑,這是PeterNorvig選擇用JPyhton翻譯他人工智慧書籍中程序的的原因,JPython可以讓他使用可移植的GUI演示,和可移植的http/ftp/html庫,所以它非常適合作為人工智慧語言。
綜合情況來講,Python更適合人工智慧編程,因為Python具有優質的文檔、設計非常好、快速、堅固、可移植、可擴展等,這些對於人工智慧而言都是非常重要的因素。

『伍』 我是高中生,學編程入門要看什麼書

不同意樓上說的。我建議先學VB,比較簡單。等差不多掌握編程思想後再學C,進而C++或者java。
C語言是面向過程的語言,程序界面不夠友好,適合編對人機交互性要求不高的程序。而且C語言涉及到指針操作和大量演算法,對於高中學生有些難。而VB是完全面向對象的語言,用戶界面設置簡單友好,編程效率高,編譯器使用也比較人性化,非常適合初學者。

『陸』 歐太力k801門禁說明書OTL K801門禁使用說明書 誰有 我想添加ID卡

摘要 你好,初始編程密碼是*9999#。

『柒』 求助大牛!C++編程,如何查詢資料庫中多條記錄的多個欄位值,並且返回到一個數據塊中...急急急!

額。。寫個個簡單的樣列,用的是ODBC,比較直接。使用ADO的話雖然代碼少,但是看起來不是很好理解。你可以自己去網路學學~
用到的函數都比較容易理解,我就沒多加說明了,如果有不理解的復制函數名網路一下,會有詳細的說明的。大概的流程就是這樣了~

//包含頭文件
#include "windows.h"
#include "sqlext.h"
#pragma comment(lib,"odbc32.lib")

int main(int argc, char* argv[]){
//1.連接數據源(前提是你已經配置好了數據源,我用的sqlserver資料庫,怎麼配數據源網路一下~很簡單的)
//分配環境句柄, 保存一些驅動程序的信息
SQLHENV henv;//環境句柄
SQLRETURN sqlRet;
sqlRet = SQLAllocEnv(&henv);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("分配環境句柄失敗!\n");
return -1;
}
//分配連接句柄
SQLHDBC hdbc;//連接句柄
sqlRet = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("分配連接句柄失敗!\n");
return -1;
}
//連接數據源(test是資料庫名字,sa 和sa 是用戶們和密碼,你替換即可)
sqlRet = SQLConnect(hdbc,(SQLCHAR*)"test",strlen("test"),(SQLCHAR*)"sa",2,(SQLCHAR*)"sa",2);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("連接數據源失敗!\n");
return -1;
}

//2.執行SQL語句
//准備語句句柄
SQLHSTMT hstmt;
sqlRet = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("連接語句句柄失敗!\n");
return -1;
}
//設置游標類型(參看:http://blog.csdn.net/bichenggui/article/details/5601381)
sqlRet = SQLSetStmtOption(hstmt,SQL_ATTR_CURSOR_TYPE,SQL_CURSOR_KEYSET_DRIVEN);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("設置游標類型失敗!\n");
return -1;
}
//執行SQL語句
//直接執行(你替換成你自己的sqlserver語句即可)
sqlRet = SQLExecDirect(hstmt,(SQLCHAR*)"insert into student values('lsk',21)",SQL_NTS);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("執行SQL語句失敗!\n");
return -1;
}

//獲取結果集
SQLCHAR value[20]={0};
SQLINTEGER len = 0;

//移動游標(不移動前游標指向結果集第一列的前面)
SQLFetch(hstmt);
//取值(取的是結果集的第一列的值),第二個參數表示取第幾列
SQLGetData(hstmt,1,SQL_C_CHAR,value,20,&len);
printf("結果為:%s\n",value);
//假如結果集有多行則再次移動游標即可
SQLFetch(hstmt);
//然後再次取值
SQLGetData(hstmt,1,SQL_C_CHAR,value,20,&len);

//關閉句柄,釋放資源
SQLFreeHandle(SQL_HANDLE_STMT, hstmt); //釋放語句句柄
SQLDisconnect(hdbc); //斷開連接
SQLFreeHandle(SQL_HANDLE_DBC, hdbc); //釋放連接句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv); //釋放環境句柄
return 0;
}

『捌』 十萬火急~~求教OTL 我修改了N遍還是有錯,請問像我這樣 函數調用,指針,數組該怎麼處理呀

void main()
{void sort(int a[],int q);///////////////////////////////這里最後少一個分號
。。。
sort(*p,i);///////////////////調用函數寫的不對,int sort(struct st *p,int i)改為sort(*p,i)
。。。
}

void sort(int a[],int q)//這里的參數q和下面的臨時變數q重復了,需要改一下
{int j,q;
int t;
for(j=0;j<0;j++)
for(q=0;q<9-j;q++)
if (a[q]<a[q+1])
{t=a[q];a[q]=a[q+1];a[q+1]=t;}
return (a[q]);
}

『玖』 下面這些OCI函數到底是在哪個lib庫中實現的用的是ORACLE11g

一、開始前的准備工作
在使用OTL進行編程之前,要首先確定使用的Oralce版本以及所選用的字元集。OTL支持目前幾乎所有的主流資料庫,可以通過宏啟用otlv4.h中對應的資料庫操作介面。
如:使用Oracle 11g R2、字元集選擇UTF8,則可在包含otlv4.h之前聲明以下兩個宏:
#define OTL_ORA11G_R2
#define OTL_ORA_UTF8
#include "otlv4.h"
....
二、常用類及其常用成員
1. otl_connect類
static int otl_initialize(const int threaded_mode=0):

用於初始化OTL環境的靜態函數,參數指定是用於多線程還是單線程。它不保證線程安全,也就是說,如果多個線程共享使用一個otl_connect對象,需要加鎖進行控制。有個同事因為在多線程環境下使用了默認的參數0,就導致了程序異常。但是單線程環境下,參數設1是沒有問題的。所以,可以考慮將此參數直接設為1。
void rlogon(...):

這個函數有多個版本,請注意參考官方文檔中與相應資料庫版本對應的函數聲明。11g中用到的參數說明如下:
const char *connect_str:連接字元串,格式為:"用戶名/密碼@資料庫服務名"
const int aauto_commit:自動提交模式。若此參數設為0(默認),則通過此連接對象執行的事務不會自動提交。如使用direct_exec執行刪除記錄的操作時,需要手動調用commit()成員函數提交事務;若設為1則通過此otl_connect對象開啟的事務會自動提交。
long direct_exec(...):
const char *sqlstm: 指定所要執行的「靜態SQL語句」,即不產生輸入或輸出的SQL語句。如delete from book where name='c++『 。但是不能執行如select sysdate from al或select * from book亦或delete from book where name=:f1之類的語句,因為它們會帶有輸入或輸出,此類SQL語句可以通過otl_stream實現,下面會有介紹。
int ignore_error:是否忽略異常。可以指定otl_exception::disable禁用異常,否則程序需要使用try...catch(otl_exception &e)...捕獲並處理異常。
int connected:

此成員變數標識了連接對象是否連接成功,一旦連接成功其值即為1。即便後來網路斷掉了,此值仍舊保持不變,logoff()後此值變為0。所以此變數只能用於檢查rlogon是否連接成功,而不能判斷當前與資料庫的連接是否正常。

2. otl_stream類
void open(...):

為流對象關聯一個SQL語句,可以是帶輸入或輸出的SQL語句或PL/SQL塊。
const int arr_size:指定流緩沖區的大小。作為輸出流使用時,若輸出緩沖區中的記錄數達到此值即緩沖區滿時,會自動刷新緩沖區,若已設設置了自動提交則一並提交數據(默認);
const char *sqlstm:SQL語句,可以指定綁定變數,如:delete from book where id = :f1 and price = :f2;
otl_connect &db:流所使用的資料庫連接對象。
void set_commit(int auto_commit=0):

設置流被刷新時否自動提交事務。兩種條件下流會被刷新:a.緩沖區滿 b.手動調用flush成員函數
void flush(...):

執行和流關聯的SQL語句。如執行:
otl_stream delStream;
delStream.open(100, delete from book where id = :f1 and price = :f2, dbConnect); //正常情況下向流中加入100條記錄時才執行刪除
delStream << 1;
delSteam << 'C++';
delStream.flush(); //立即執行刪除操作,盡管當前流中只有一條記錄
long get_rpc():

獲取流中SQL語句執行後所影響到的記錄數,如插入100條記錄,則調用此函數返回的即為100
int good():

判斷流對象是否已正常打開,已打開返回1。注意:若復用一個流對象時,必須先調用close函數將其關閉,然後再調用open重新打開。
int get_dirty_buf_len():

獲取當前流對象緩沖區中的記錄數,其最大值為緩沖區size-1。每當緩沖區滿時會自動刷新,刷新後再調用此函數時返回0

3.otl_exception類
該類的幾個成員用於表示異常的信息,如:
char stm_text[2048]:出錯的SQL語句;
char var_info[256]:若在流中使用了與實際類型不符的綁定變數,此數組的值為綁定變數的信息;
unsigned char msg[1000]:這個我比較喜歡用,此數組顯示出具體的異常信息(包括oracle返回的錯誤碼),如連接超時等等。

三、對於網路異常的處理
現在項目對於程序的異常處理能力要求越來越高,比如網路中斷或資料庫出現異常等,要求在故障恢復後,程序能正常與資料庫保持連接,使業務盡可能的少受影響。可以通過以下方法解決此種情況。這也是折磨了我兩天的一個問題:(
首先,程序要在提交數據的地方使用try...catch捕獲otl_exception異常,當提交失敗時,otl會拋出此異常並攜帶異常信息;
其次,要在捕獲到異常之後,關閉之前的連接對象(如果有流使用此連接對象,則一定要先關閉流對象,然後再斷開otl_connect對象);
最後,重新連接資料庫並再次初始化流對象。
如:

void ReConnect(otl_connect &otlConnect, const char *pConnStr, int iAutoCommit);

....
//聲明otl對象並初始化對象
otl_connect dbConn;
otl_stream outStream;

void Init(void)
{
try
{
otl_connect::otl_initialize(1);
dbConn.rlogon("test1/password@testdb");
outStream.open(100, "insert into book values(:f1, :f2, :f3, :f4)", dbConn);
outStream.set_commit(1);
}
catch (otl_exception &e)
{
//處理異常
}
}

//提交數據的函數
void Submit(void)
{
try
{
for (int i = 0; i < 5000; i++)
{
outStream << i;
outStream << "abc";
outStream << i;
outStream << "null";
}
}
catch(otl_exception &e)
{
//提交數據異常,重新連接資料庫並重新初始化流對象
outStream.close(); //必須先關閉流對象。若先斷開連接會出現關閉流對象時報OCIHandleFree異常導致流對象無法正常關閉引起內存泄漏
ReConnect(dbConn, "test1/password@testdb", 0);
outStream.open(100, "insert into book values(:f1, :f2, :f3, :f4)", dbConn);
outStream.set_commit(1);
}
}

//重新連接連接資料庫函數
void ReConnect(otl_connect &otlConnect, const char *pConnStr, int iAutoCommit)
{
if (1 == otlConnect.connected)
{
otlConnect.logoff();
}
Retry:
try
{
otlConnect.rlogon(pConnStr, iAutoCommit);
}
catch (otl_exception &e)
{
Sleep(1000);
goto Retry;
}
}
這樣,調用Submit函數提交數據時,就有了網路異常處理功能,若提交失敗則會一直嘗試重新連接,直到連接成功為止。

『拾』 otl編程中(oracle) insert中對於date型欄位怎麼給值呀,知道用sysdate,具體怎麼弄呀

tk_idate=sysdate

閱讀全文

與otl編程相關的資料

熱點內容
java聊天窗口 瀏覽:976
單片機控制陣列led燈 瀏覽:577
白鹿用的什麼APP修圖 瀏覽:499
阿里雲輕量應用伺服器ssh無法連接 瀏覽:794
員工福利系統源碼 瀏覽:980
數據加密如何設置 瀏覽:570
php取余運算 瀏覽:153
php如何壓縮圖片大小 瀏覽:137
編程三階教程 瀏覽:983
pdf顏色查看 瀏覽:469
怎麼用指令停用命令方塊java 瀏覽:406
滑鼠命令行 瀏覽:567
如何朗讀pdf 瀏覽:746
壓縮機啟動後繼電器發燙 瀏覽:405
小學編程項目學習 瀏覽:557
net編譯運行原理 瀏覽:786
加密電腦的文件拷出來打不開 瀏覽:366
可達性演算法根 瀏覽:208
ibm的伺服器怎麼安裝系統 瀏覽:492
pdftomobi在線 瀏覽:797