sql >> データベース >  >> RDS >> Oracle

サーバー側のSwiftを使用したOracleデータベースへの接続

    次の方法を使用して、Oracleデータベースに接続できます:(これは、vaporコミュニティの助けを借りて可能になりました。)

    ----- Oracleドライバを機能させるために、Ubuntuでこのメソッドを結びました---------------ヘッダーとライブラリパスを定義できるように、Oracleクライアントをインストールする必要があります。これらはオラクルのWebサイトから入手できます。

    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フォルダーに抽出し、makeおよびmakeinstallを構成します

        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をマシンにインストールします。--VaporプロジェクトでOCILIBライブラリを使用するには以下を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
    

    -データベース列のUnicode文字を表示するには、VaporアプリケーションをホストしているサーバーでNLS_LANGを設定する必要がある場合があります。

    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    



    1. SQL Server 2005で電話番号を格納するために使用するデータ型は何ですか?

    2. PL / SQLでWebサービスを使用します:UTL_DBWSまたはAPEX_WEB_SERVICE?

    3. magic_quotes()を使用すると、mysql_real_escape_string()の使用に影響しますか?

    4. SQL Serverでリンクされたデータベースサーバーを作成してクエリするにはどうすればよいですか?