Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Kết nối với cơ sở dữ liệu Oracle bằng Swift phía máy chủ

bạn có thể sử dụng phương pháp sau để kết nối với cơ sở dữ liệu oracle:(Điều này có thể thực hiện được nhờ sự trợ giúp của cộng đồng hơi.)

----- để làm cho trình điều khiển oracle hoạt động, tôi đã buộc phương pháp này trong Ubuntu --------------- ứng dụng khách oracle cần được cài đặt để có thể xác định tiêu đề và đường dẫn thư viện, bạn có thể lấy những thứ này từ trang web oracle.

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

- cài đặt gói đã tải xuống do đó sử dụng lệnh sau

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

- Cài đặt libaio1 trong ubuntu

sudo apt install libaio1

- đường dẫn này phải nằm trong ~ / .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

--tải xuống thư viện OCILIB từ Githubgit clone https://github.com/vrogier/ocilib.git (hoặc tải xuống phiên bản mới nhất / được thử nghiệm trên ocilib 4.5.2) - giải nén cd tệp ocilib vào thư mục ocilib, định cấu hình tạo và thực hiện cài đặt

    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

- sử dụng cấu hình này nếu bạn cần xử lý các mã unicodes, nói chung bạn không cần cấu hình này

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

- Phương pháp trên cài đặt OCILIB trong máy của bạn. - Để sử dụng thư viện OCILIB trong dự án Vapor của bạn Bao gồm phần sau trong tệp Package.swift của bạn

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

- Trong Routes.swift, hãy bao gồm những điều sau:

    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

    }
    }

--Để chạy Vapor 3, bạn cần liên kết các tệp thư viện

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

- Để hiển thị các ký tự unicode từ bất kỳ cột cơ sở dữ liệu nào, bạn có thể phải đặt NLS_LANG trong ứng dụng Vapor lưu trữ máy chủ.

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. Làm thế nào để biết Oracle Client đã cài đặt là 32 bit hay 64 bit?

  2. Chức năng gọi VBA qua VBA và ADO

  3. Làm cách nào để biết khi nào một thủ tục đã lưu trữ được sửa đổi hoặc biên dịch lần cuối trong Oracle?

  4. Truy vấn đệ quy trong Oracle

  5. Thủ tục thực hiện mệnh đề trường hợp