Oracle
 sql >> база данни >  >> RDS >> Oracle

Свързване към база данни на Oracle с помощта на Swift от страната на сървъра

можете да използвате следния метод, за да се свържете с базата данни на oracle:(Това беше възможно с помощта на vapor общността.)

-----за да накарам драйвера на oracle да работи, свързах този метод в Ubuntu--------------- клиентът на 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

-- Инсталирайте libaio1 в ubuntu

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

--изтегляне на OCILIB библиотека от Githubgit клонинг https://github.com/vrogier/ocilib.git (или изтеглете най-новата версия / тествана на ocilib 4.5.2)-- извлечете cd файла на ocilib в папка ocilib, конфигурирайте make и направете инсталация

    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

-- използвайте тази конфигурация, ако трябва да работите с unicode, обикновено не ви трябва това

./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 във вашия проект Vapor Включете следното във вашия файл 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"])
        ]
    )

-- В 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 в сървъра, хостващ приложението Vapor.

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. Oracle база данни 12c Грешка при опит за свързване:Мрежовият адаптер не можа да установи връзката

  2. Как да експортирате резултата от заявката в csv в Oracle SQL Developer?

  3. Как да извлека резултат от функцията на база данни на Oracle чрез ODBC?

  4. Свързване на C# с Oracle

  5. където rownum=1 заявка отнема време в Oracle