開發環境:fedora12 + oracle-client11 + eclipse
目標資料庫:oracle10g
一、準備
1. 建表
create table testtable_oci2. 建立儲存過程(插入記錄)( sid int primary key,
seq varchar2(10),
uname varchar2(20),
introduce varchar2(2000),
intime date default sysdate
)-- create sequence
create sequence testtable_ociseq
minvalue 1
maxvalue 9999999999999999999999
start with 1
increment by 1
cache 20
cycle;
create or replace procedure proc_oci_insert二、**is curid int;
begin
select testtable_ociseq.nextval into curid from dual;
insert into testtable_oci(sid,seq,uname,introduce) values(curid, 'seq'||curid, 'name'||curid, 'introduce_'||curid);
end;
#include #include #include #include text *username = (text*)"scott";不要忘了新增環境變數(我的oracle客戶端安裝在/opt/oracle/):text *password = (text*)"scott";
text *servicename = (text*)"orcl";
ocienv *envhp; // 環境控制代碼
ociserver *srvhp; // 伺服器控制代碼
ocisvcctx *svchp; // 服務上下文控制代碼
ocierror *errhp; // 錯誤控制代碼
ocisession *usrhp; // 使用者會話控制代碼
ocistmt *stmthp; // 語句控制代碼
ocibind *bndhp; // 繫結控制代碼
int init_env_handle()
sword status = 0;
if(status = ocihandlealloc((void*)envhp, (void**)&errhp, oci_htype_error, (size_t)0, 0))
if(status = ocihandlealloc((void*)envhp, (void**)&srvhp, oci_htype_server, (size_t)0, 0))
if(status = ocihandlealloc((void*)envhp, (void**)&svchp, oci_htype_svcctx, (size_t)0, 0))
if(status = ocihandlealloc((void*)envhp, (void**)&usrhp, oci_htype_session, (size_t)0, 0))
if(status = ocihandlealloc((void*)envhp, (void**)&stmthp, oci_htype_stmt, (size_t)0, 0))
return 1;
}int connect_server()
// 設定會話屬性
if(status = ociattrset((void*)svchp, oci_htype_svcctx, (void*)srvhp, 0, oci_attr_server, errhp))
if(status = ociattrset((void*)usrhp, oci_htype_session, (void*)username, strlen(username), oci_attr_username, errhp))
if(status = ociattrset((void*)usrhp, oci_htype_session, (void*)password, strlen(password), oci_attr_password, errhp))
// 開始會話
if(status = ocisessionbegin((ocisvcctx*)svchp, errhp, usrhp, oci_cred_rdbms, oci_default))
printf("session begin succssfully!\n");
// 設定會話屬性
if(status = ociattrset((void*)svchp, oci_htype_svcctx, (void*)usrhp, 0, oci_attr_session, errhp))
return 1;
}void cleanup()
int disconnect_server()
// 呼叫package取出結果集並返回
int getresult(ocistmt *stmthp)
; int vsid = 1;
char ch[3][1024] = ;
text sql[1024] = ;
ub4 ub4recordno = 1;
sb4 sb4errorcode;
char serrormsg[1024] = ;
ocidefine *hdefine[2] = ;
sb2 sb2ind[2] = ; // 所選擇的列可能存在null,所以要用指示器變數
sprintf(sql, "%s", "select uname,introduce from testtable_oci where sid=:vsid");
ocistmtprepare(stmthp, errhp, sql, strlen(sql), oci_ntv_syntax, oci_default);
s[1] = ocidefinebypos(stmthp, &hdefine[0], errhp, 1, ch[0], sizeof(ch[0]), sqlt_str, &sb2ind[0], null, null, oci_default);
s[2] = ocidefinebypos(stmthp, &hdefine[1], errhp, 2, ch[1], sizeof(ch[1]), sqlt_str, &sb2ind[1], null, null, oci_default);
for(vsid = 0; vsid < 12; vsid++) // 迴圈繫結第乙個輸入變數以執行不同的sql語句
else if(s[3] == oci_no_data)
else
}return 0;
}int main(void)
cleanup();
} return exit_success;
}
讀取文字的一條記錄
有乙個txt檔案,每一行是一條記錄,記錄的每乙個字段之間用tab隔開 用readstring可以把一行讀入乙個緩衝區,我怎麼把單個欄位的值讀出來呢?將每行讀入cstring中,再用cstring的find進入拆分int npos strbufer.find t 0 迴圈提取,結束後再處理檔案的下一行...
單條記錄的啟用和禁用
1 在操作的位置加入如下 段 if tbrand.status 1 禁用 else 啟用 if 2 書寫啟用跟禁用的ajax語句 啟用單條記錄 btn enable loippi click function datatype json cache false,success function me...
關於刪除單條記錄報錯的問題
花了兩個小時去想乙個相當簡單的問題,所有的問題在我看來,在沒解決之前都覺得很難,在真正意義上解決的時候,弄懂報錯的根源就會覺得其實就這麼簡單。1.如果執行程式報錯,那麼第一步就看在哪報的錯,重點就看錯誤的第一條和最後一條關於caust by的語句。2.如果頁面上無錯誤顯示,控制台上也無準確訊息列印 ...