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