Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

सर्वर साइड स्विफ्ट का उपयोग करके Oracle डेटाबेस से कनेक्ट करना

आप ओरेकल डेटाबेस से कनेक्ट करने के लिए निम्न विधि का उपयोग कर सकते हैं:(यह वाष्प समुदाय की मदद से संभव था।)

----- ऑरैकल ड्राइवर को काम करने के लिए, मैंने इस विधि को उबंटू में बांधा है --------------- ओरेकल क्लाइंट को इस तरह स्थापित करने की आवश्यकता है कि हेडर और लाइब्रेरी पथ को परिभाषित किया जा सके, आप इन्हें oracle वेबसाइट से प्राप्त कर सकते हैं।

oracle-instantclinet*-basic-*.rpm
oracle-instantclinet*-devel-*.rpm
oracle-instantclinet*-sqlplus-*.rpm

--निम्नलिखित कमांड का उपयोग करके इस प्रकार डाउनलोड किए गए पैकेज को स्थापित करें

sudo alien -i oracle-instantclinet*-basic-*.rpm
sudo alien -i oracle-instantclinet*-devel-*.rpm
sudo alien -i oracle-instantclinet*-sqlplus-*.rpm

-- ubuntu में libaio1 इंस्टॉल करें

sudo apt install libaio1

-- यह पथ ~/.bashrc

. में होना चाहिए
#oracle home and library path
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/12.2/client64/lib:/usr/local/lib

- Githubgit क्लोन से OCILIB लाइब्रेरी डाउनलोड करें https://github.com/vrogier/ocilib.git ए> (या नवीनतम संस्करण डाउनलोड करें / ocilib 4.5.2 पर परीक्षण किया गया) - ocilib फ़ाइल cd को ocilib फ़ोल्डर में निकालें, मेक को कॉन्फ़िगर करें और इंस्टॉल करें

    tar -zxf ocilib-4.5.2-gnu.tar.gz
    cd ocilib-4.5.2
    ./configure --with-oracle-headers-path=/usr/include/oracle/12.2/client64/ --with-oracle-lib-path=/usr/lib/oracle/12.2/client64/lib CFLAGS="-O2 -m64"
    make
    sudo make install

-- यदि आपको यूनिकोड से निपटने की आवश्यकता है तो इस कॉन्फ़िगरेशन का उपयोग करें, आमतौर पर आपको इसकी आवश्यकता नहीं होती है

./configure --with-oracle-headers-path=/usr/include/oracle/12.2/client64/ --with-oracle-lib-path=/usr/lib/oracle/12.2/client64/lib --with-oracle-charset=wide CFLAGS="-O2 -m64"

--उपरोक्त विधि आपकी मशीन में OCILIB स्थापित करती है।-- अपने वाष्प परियोजना में उपयोगकर्ता OCILIB पुस्तकालय के लिए पैकेज.स्विफ्ट फ़ाइल में निम्नलिखित शामिल करें

    // swift-tools-version:4.0
    import PackageDescription

    let package = Package(
        name: "myAPIProject",
        dependencies: [
            // 💧 A server-side Swift web framework.
            .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"),

            // 🔵 Swift ORM (queries, models, relations, etc) built on SQLite 3.
            .package(url: "https://github.com/vapor/fluent-sqlite.git", from: "3.0.0"),

            //Oracle wrapper for swift
            .package(url: "https://github.com/h1257977/SwiftOracle.git", from: "0.1.7")
        ],
        targets: [
            .target(name: "App", dependencies: ["FluentSQLite","SwiftOracle", "Vapor"]),
            .target(name: "Run", dependencies: ["App"]),
            .testTarget(name: "AppTests", dependencies: ["App"])
        ]
    )

-- Routes.swift में निम्नलिखित शामिल करें:

    import Vapor
    import SwiftOracle

    let service = OracleService(host: "192.168.1.12", port:"1521", service: "orcl")
    let b = Connection(service: service, user:"test", pwd:"oracle")

    final class VReq: Content {
        var name: String? 
        var age: String?

        init (NAME: String, AGE: String) {
        self.name = NAME
        self.age = AGE
    }

    final class VMdata {

            func getData() throws ->  [VReq] {
                try! b.open()
                b.autocommit = true
                let cursor = try! b.cursor()
                try! cursor.execute("select * from userlist")
                //iterates each row in the cursor and maps only the values (keys are unique) from the dictionary of each rows, if its nil it will replace with "null" 
                var items = cursor.map { row in row.dict.mapValues { "\($0 ?? "NULL")" }} //  output as [[String:String]]

                //takes each dictionary in the items array and returns a VReq
                let result = items.map { dict in VReq(NAME: dict["NAME"] ?? "NULL", ADDRESS: dict["ADDRESS"] ?? "NULL", USER_AGE: dict["USER_AGE"] ?? "NULL")}
                return result
                }

    }

    public func routes(_ router: Router) throws {

    router.get("test") { req -> [VReq] in

        let val = VMdata()
        let vdata = try! val.getData()
        return vdata

    }
    }

--Vapor 3 चलाने के लिए आपको लाइब्रेरी फ़ाइलों को लिंक करना होगा

swift build -Xlinker -L/usr/local/lib && ./.build/x86_64-unknown-linux/debug/Run --hostname 0.0.0.0

-- किसी भी डेटाबेस कॉलम से यूनिकोड वर्ण प्रदर्शित करने के लिए आपको सर्वर होस्ट करने वाले वाष्प एप्लिकेशन में NLS_LANG सेट करना पड़ सकता है।

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दिनांक सीमाएं मर्ज करें

  2. क्या डीबीडी ::ओरेकल का उपयोग करके एक ही क्वेरी में एकाधिक कथन निष्पादित करना संभव है?

  3. संग्रहीत प्रक्रिया से एकाधिक पंक्तियों को कैसे वापस करें? (ओरेकल पीएल/एसक्यूएल)

  4. oracle sqlplus में sql स्क्रिप्ट का निष्पादन समय प्राप्त करें

  5. DB2 और Oracle परिप्रेक्ष्य से CLOB और BLOB के बीच अंतर?