LoginSignup
0
1

More than 5 years have passed since last update.

Swift-Kueryを利用したMySQLへの接続

Posted at

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()でも実行すれば結果がログに出力されます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1