Windows下C語言連接Oracle數據庫

為什么80%的碼農都做不了架構師?>>> ??hot3.png

最近公司有個項目需要用到Oracle數據庫,我負責前期的調研。由于項目要用到C和PHP兩種語言,所以先收集這兩種語言連接Oracle的方法。PHP使用的是Laravel框架,直接使用了Laravel-OCI8進行數據庫連接,毫無壓力的連接成功了。C使用的是Ocilib進行數據庫連接,在這里踩了幾個坑,卡了幾天,今天有空整理下,防止下次繼續掉坑。

提示:本文使用的是win7 64位去連接遠程的 Oracle 11g數據庫

OCILIB介紹

OCILIB是一個跨平臺的Oracle驅動程序,可提供非常快速和可靠地訪問Oracle數據庫。它提供了一個豐富,功能齊全,并易于使用的API 。OCILIB 支持運行的所有Oracle平臺。

OCI環境搭建

由于OCILIB是對OCI進行二次封裝,所以在使用OCILIB前,需要安裝OCI環境,我們只要安裝好Instant Client就能完成OCI環境的搭建。

Instant Client下載

首先我們從官方下載自己系統所對應的Instant Client,由于我的系統是win7 64位的,所以選擇了 Instant Client for Microsoft Windows (x64)下的 instantclient-basic-windows.x64-12.1.0.2.0.zip

提示:頁面下需要點擊 Accept License Agreement 后才能開始下載。

Instant Client安裝

我們將下載的文件解壓到電腦任意位置(本文將以解壓到 D:\instantclient_12_1 為例),然后添加以下環境變量:

  • path => D:\instantclient_12_1
  • TNS_ADMIN => D:\instantclient_12_1
  • NLS_LANG => SIMPLIFIED CHINESE_CHINA.ZHS16GBK

提示:path如果已經存在值的話,直接在尾部追加。

下載OCILIB

直接從Github上下載最新版即可,下載完成后將文件解壓到任意位置(本文將以解壓到 **C:\ocilib **為例)。

VS2010配置

  1. 點擊 項目 - 屬性 - 配置管理器,新建一個X64平臺(因為我下載的Instant Client是64位的,所以要用x64平臺)
  2. 點擊 項目 - 屬性 - 配置屬性 - VC++ 目錄,在 包含目錄 添加 C:\ocilib\include
  3. 點擊 項目 - 屬性 - 配置屬性 - 鏈接器 - 常規,在 附加庫目錄 添加 C:\ocilib\lib64

示例代碼

#include "stdafx.h"
#include "ocilib.h"#if defined(OCI_CHARSET_WIDE)
#pragma comment(lib, "ocilibw.lib")
#elif defined(OCI_CHARSET_ANSI)
#pragma comment(lib, "ociliba.lib")
#endifvoid err_handler(OCI_Error *err)
{printf("code  : ORA-%05i\n""msg   : %s\n""sql   : %s\n",OCI_ErrorGetOCICode(err), OCI_ErrorGetString(err),OCI_GetSql(OCI_ErrorGetStatement(err)));
}int main(int argc, _TCHAR* argv[])
{OCI_Connection* cn;OCI_Statement* st;OCI_Resultset* rs;OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);cn  = OCI_ConnectionCreate("192.168.1.152:1521/TEST", "system", "123456", OCI_SESSION_DEFAULT);if(cn == NULL){err_handler(OCI_GetLastError());printf("%i",OCI_GetVersionServer(cn));printf("連接失敗!\n");}st  = OCI_StatementCreate(cn);OCI_ExecuteStmt(st, "select id,age from web_user");rs = OCI_GetResultset(st);while (OCI_FetchNext(rs)){printf("code: %i, name %s\n", OCI_GetInt(rs, 1)  , OCI_GetString(rs, 2));}printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));OCI_Cleanup();char a[20];gets(a);return EXIT_SUCCESS;
}

提示:程序運行時如果提示 計算機中丟失 ocilib*.dll,這里由于程序找不到ocilib*.dll造成的,只要將 C:\ocilib\lib64 加入path或者將 C:\ocilib\lib64 下的 ocilib*.dll 復制到程序目錄就可以解決了。

轉載于:https://my.oschina.net/jathon/blog/756205

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SU suspecfk命令學習

用suplane生成平面,并查看其FK譜, 水平反射界面經FK變換后,波數為0, 正好處于臨界,乃奎斯特頻率, 有空間假頻, Over,不足之處,歡迎批評指正。 轉載于:https://www.cnblog…

dblink查詢_分庫數據如何查詢統計

分庫后的計算不能直接使用SQL;異構庫 SQL 函數不盡相同;JAVA 硬編碼實施難度大;即使借助透明網關訪問遠程數據庫,分庫性能優化也是頭疼問題。一般常規辦法:方法1:java硬編碼簡單的跨庫count運算&#xff0c…

python 爬取大樂透開獎結果

#codingutf-8 #下面中文注釋不支持 所以開頭加 "#codingutf-8" # 獲取近期大樂透開獎結果, 并給出自己猜中的個數import requests# 這個API能夠免費得到近期開獎結果, url里的-20代表獲取近20期的開獎信息 url "http://f.apiplus.net/dlt-20.json" re…

【Python五篇慢慢彈(5)】類的繼承案例解析,python相關知識延伸

類的繼承案例解析&#xff0c;python相關知識延伸 作者&#xff1a;白寧超 2016年10月10日22:36:57 摘要&#xff1a;繼<快速上手學python>一文之后&#xff0c;筆者又將python官方文檔認真學習下。官方給出的pythondoc入門資料包含了基本要點。本文是對文檔常用核心要點…

課堂練習之小強大掃蕩

標題&#xff1a;在將程序安裝到新的手機上時會出現程序崩潰 解決&#xff1a;1、找出錯誤&#xff1a;經過一系列測試&#xff0c;發現問題出現在第一次訪問數據庫的代碼時報錯。錯誤原因為不能發現數據庫中的建立的表。 2、如何解決&#xff1a;在主頁面加入訪問數據庫語句。…

領域驅動設計:軟件核心復雜性應對之道_人人都可以領域驅動設計(一)

最近幾年&#xff0c;領域驅動設計&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;這個術語越來越多地出現在軟件工程師的視野里。對DDD不熟悉的人可能會覺得它是軟件領域里的一個新的概念&#xff0c;但是實際上&#xff0c;Eric Evans在十幾年前就已經提出了這…

linux 進程通信 消息隊列

詳解linux進程間通信-消息隊列 前言&#xff1a;前面討論了信號、管道的進程間通信方式&#xff0c;接下來將討論消息隊列。 一、系統V IPC 三種系統V IPC&#xff1a;消息隊列、信號量以及共享內存&#xff08;共享存儲器&#xff09;之間有很多相似之處。 每個內核中的 I P …

laravel框架——composer導入laravel

第一種&#xff1a;  composer create-project --prefer-dist laravel/laravel projectName "5.2.*"第二種&#xff1a;  composer global require "laravel/installer"  laravel new 名稱轉載于:https://www.cnblogs.com/xj76149095/p/5951822.html…

第七章 心得體會

通過第七章的學習&#xff0c;使自己對驅動程序的認識更加深刻&#xff0c;LED燈的驅動程序幫我我學到很多&#xff0c;還學會了驅動的移植。 學到的知識&#xff1a; 一、編寫LED驅動 1、創建LED驅動的設備文件 第一步&#xff1a;使用cdev_init函數初始化cdev leds_cdev.owne…

wx.checkjsapi是寫在config里面嗎_用Python寫一個程序,解密游戲內抽獎的秘密

前言本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。作者&#xff1a; 極客挖掘機PS&#xff1a;如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun分析需求我們先整理下思…

Dev C++安裝第三方庫boost

Dev_C安裝第三方庫boost 安裝步驟 準備工作下載boost庫&#xff0c;下載地址https://sourceforge.net/projects/boost/1. 設置GCC的環境變量PATH 設置環境變量path,在其中加上DEV-C編譯器的路徑&#xff08;gcc.exe所在路徑&#xff09;&#xff0c;如C:\Program Files (x86)…

bash的一些小技巧

1、從輸入讀入變量 eg:read -ep "input yes or no: " flag 用e選項表示編輯&#xff0c;可以使用backspace刪除 2、數組 a、索引數組 declare -a arr(var1 var2 var3) 用空格分割&#xff0c;如果直接訪問變量$arr&#xff0c; 則獲取的是數組的第一個元素&#xff0…

golang switch_為什么程序員都不喜歡使用 switch ,而是大量的 if……else if ?

點擊上方“我要學編程”&#xff0c;選擇“置頂/星標公眾號”福利干貨&#xff0c;第一時間送達&#xff01;來自 | C語言Plus請用5秒鐘的時間查看下面的代碼是否存在bug。OK&#xff0c;熟練的程序猿應該已經發現Bug所在了&#xff0c;在第13行下面我沒有添加關鍵字break; 這就…

RabbitMQ 安裝與簡單使用

在企業應用系統領域&#xff0c;會面對不同系統之間的通信、集成與整合&#xff0c;尤其當面臨異構系統時&#xff0c;這種分布式的調用與通信變得越發重要。其次&#xff0c;系統中一般會有很多對實時性要求不高的但是執行起來比較較耗時的地方&#xff0c;比如發送短信&#…

數據庫函數依賴及范式

一、基礎概念   要理解范式&#xff0c;首先必須對知道什么是關系數據庫&#xff0c;如果你不知道&#xff0c;我可以簡單的不能再簡單的說一下&#xff1a;關系數據庫就是用二維表來保存數據。表和表之間可以……&#xff08;省略10W字&#xff09;。   然后你應該理解以下…

windows svn

windows svn 1.1Svn和VisualSvn介紹 VisualSvn Server2.5.6&#xff08;版本控制服務器&#xff09;免費開源軟件 是基于Windows平臺上的Subversion服務器&#xff0c;它是免費的 官方下載&#xff1a; http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi TortoiseSvn…

信息摘要技術及算法介紹

數據摘要算法是密碼學算法中非常重要的一個分支&#xff0c;它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能&#xff0c;由于其不可逆性&#xff0c;有時候會被用做敏感信息的加密。 數據摘要算法也被稱為哈希&#xff08;Hash&#xff09;算法、散列算法…

AutoLayout的那些事兒

AutoLayout非常強大也非常易用&#xff0c;可讀性也很強&#xff0c;加上各種第三方AutoLayout庫&#xff0c;讓你布起局來猶如繃掉鏈子的狗&#xff01;根本停不下來&#xff01;以前的 1label.frame.origin.y label.frame.size.height 10如今只用&#xff1a; 123button.sn…

docker-compose下載慢_編寫Docker Compose時要注意的五大常見錯誤

在構建容器化的應用時&#xff0c;開發人員往往需要某種方法來引導啟動目標容器&#xff0c;以對其進行代碼級別的測試。盡管業界有許多方法可以實現該目的&#xff0c;但Docker Compose是目前最受歡迎的一種方法。它能夠讓如下兩個方面變得容易實現&#xff1a;指定在開發過程…

前端測試利器--Browser-Sync啟動命令

使用browser-sync啟動命令cmd切換到項目的根目錄下**1.browser-sync start --server --files "css/*.css"----------**使用兩個*檢測所有的目錄**轉載于:https://blog.51cto.com/1888512/1862054