Swift-Kueryを利用したMySQLへの接続
今回は下記の構成で作成してみました。
PostgreSQLとSQLiteにも対応しています。
- macOS 10.12.6
- Xcode 8.3.3
- Apple Swift version 3.1
- Mysql 5.7.19
Swift-Kueryの読み込み
作成したプロジェクト内のPackage.swift
を下記のように編集し、ライブラリを登録します。
Package.swift
import PackageDescription
let package = Package(
name: "Swift-Kuery-test",
dependencies: [
.Package(url: "https://github.com/IBM-Swift/HeliumLogger.git", majorVersion: 1, minor: 7),
.Package(url: "https://github.com/IBM-Swift/SwiftKueryMySQL.git", majorVersion: 0, minor: 13)
]
)
マッピング
Swiftのオブジェクトとデータベースのマッピングを行います。
Sample.swift
import SwiftKuery
class Sample:Table{
let tableName = "sample"
let id = Column("sample_id")
let name = Column("sample_name")
}
スキーマとテーブルの定義はこんな感じです。
test.sql
-- -----------------------------------------------------
-- Schema swift_kuery_test
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `swift_kuery_test`;
CREATE SCHEMA `swift_kuery_test`;
USE `swift-kuery-test`;
-- -----------------------------------------------------
-- Table `swift_kuery_test`.`sample`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `swift_kuery_test`.`sample`;
CREATE TABLE `swift_kuery_test`.`sample`(
`sample_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`sample_name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`sample_id`)
)
ENGINE = InnoDB;
接続
それではいよいよmysqlへ接続してみます。
SampleDAO.swift
import SwiftKuery
import SwiftKueryMySQL
import HeliumLogger
import LoggerAPI
class SampleDAO{
static func selectAll(){
let sample = Sample();
let connection = MySQLConnection(host: "localhost", user: "foo", password: "*****", database: "sample", characterSet: "UTF-8")
Log.info("connect to mysql...")
connection.connect(){error in
if let error = error {
Log.info("Error is \(error)")
return
}
let query = Select(sample.id,sample.name,from: sample)
Log.info("connection.execute")
connection.execute(query: query) { result in
if let resultSet = result.asResultSet {
for row in resultSet.rows {
for cell in row{
if let value = cell {
Log.info(String(describing: value))
}
}
}
}else if let queryError = result.asError {
// Something went wrong.
Log.info("Something went wrong \(queryError)")
}
}
}
}
}
あとはSampleDAO.selectAll()
でも実行すれば結果がログに出力されます。