Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Łączenie się z bazą danych Oracle za pomocą Swift po stronie serwera

możesz użyć następującej metody, aby połączyć się z bazą danych Oracle:( Było to możliwe dzięki pomocy społeczności Vapor.)

----- aby sterownik Oracle działał, powiązałem tę metodę w Ubuntu--------------- Klient Oracle musi być zainstalowany tak, aby można było zdefiniować nagłówek i ścieżkę biblioteki, możesz je pobrać ze strony internetowej Oracle.

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

-- zainstaluj pobrany pakiet za pomocą następującego polecenia

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

-- Zainstaluj libaio1 w Ubuntu

sudo apt install libaio1

-- ta ścieżka powinna znajdować się w ~/.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

--pobierz bibliotekę OCILIB z klonu Githubgit https://github.com/vrogier/ocilib.git (lub pobierz najnowszą wersję / przetestowaną na ocilib 4.5.2)-- rozpakuj płytę CD z plikiem ocilib do folderu ocilib, skonfiguruj make i make install

    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

-- użyj tej konfiguracji, jeśli masz do czynienia z kodami Unicode, generalnie nie potrzebujesz tego

./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"

-- Powyższa metoda zainstaluje OCILIB na twoim komputerze.-- Do biblioteki OCILIB użytkownika w twoim projekcie Vapor Dołącz następujący plik Package.swift

    // 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"])
        ]
    )

– W Routes.swift uwzględnij:

    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

    }
    }

--Aby uruchomić Vapor 3, musisz połączyć pliki biblioteki

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

-- Aby wyświetlić znaki Unicode z dowolnej kolumny bazy danych, może być konieczne ustawienie NLS_LANG w aplikacji Vapor na serwerze.

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. Podczas wykonywania zapytania względem widoku klauzula filtrowania w definicji widoku jest ignorowana

  2. Oracle Rolling lub Running sumy według miesiąca

  3. Jak wyświetlić zawartość Check Constraint w Oracle?

  4. Jak zrezygnować z Oracle LOB

  5. Oracle ORA-01031:niewystarczające uprawnienia podczas tworzenia użytkownika