用于 Swift-Kuery 框架的 MySQL 插件。它使您可以使用 Swift-Kuery 来操作 MySQL 数据库中的数据。
最新版本的 SwiftKueryMySQL 需要 Swift 4.0 或更高版本。您可以通过此链接下载此版本的 Swift 二进制文件。不保证与其他 Swift 版本的兼容性。
brew install mysql
mysql.server start
sudo apt-get update
sudo apt-get install mysql-server libmysqlclient-dev pkg-config
sudo service mysql start
在 macOS 上,可以使用常规的 swift 命令进行构建和测试。使用下面的示例命令来生成 Xcode 项目。
例如,
swift build
swift test
swift package generate-xcodeproj --xcconfig-overrides Config.xcconfig
在 Linux 上,如果您的 MySQL 安装是 5.7 或更高版本,标准 swift 命令也将有效。如果使用早期版本的 MySQL,请将 -Xcc -I/usr/include/mysql
添加到 swift 命令,以将编译器指向 MySQL 头文件。
例如,
swift build -Xcc -I/usr/include/mysql/
swift test -Xcc -I/usr/include/mysql/
将 SwiftKueryMySQL
包添加到应用程序的 Package.swift
文件中的依赖项。 将 "x.x.x"
替换为最新的 SwiftKueryMySQL
发行版。
.package(url: "https://github.com/IBM-Swift/SwiftKueryMySQL.git", from: "x.x.x")
将 SwiftKueryMySQL
添加到你的目标的依赖项中
.target(name: "example", dependencies: ["SwiftKueryMySQL"]),
import SwiftKueryMySQL
通过调用以下代码创建 MySQLConnection
的实例
let connection = MySQLConnection(host: host, user: user, password: password, database: database,
port: port, characterSet: characterSet)
其中
所有连接参数都是可选的,因此如果您以当前用户身份使用标准的本地 MySQL 服务器,则可以简单地使用
let connection = MySQLConnection(password: password)
password 也是可选的,但建议使用。
或者,调用
let connection = MySQLConnection(url: URL(string: "mysql://\(user):\(password)@\(host):\(port)/\(database)")!))
现在您有了一个连接,可用于执行使用 Swift-Kuery 创建的 SQL 查询。
要连接到服务器并执行查询
connection.connect() { result in
guard result.success else {
// Connection unsuccessful
return
}
// Connection succesful
// Use connection
connection.execute(query: query) { queryResult in
guard queryResult.success else {
// Check for Error and handle
return
}
// Process queryResult
}
}
MySQLConnections 不应用于执行并发操作,因此不应在没有适当同步的情况下跨线程共享。 如果您希望在多个线程之间共享连接,建议使用连接池,因为连接池将确保您的连接不会被并发使用。
下面的示例创建一个包含单个连接的 ConnectionPool
,并使用它在多个线程上执行插入操作
var connectionPoolOptions = ConnectionPoolOptions.init(initialCapacity: 1, maxCapacity: 1)
let connectionPool = MySQLConnection.createPool(host: host, user: user, password: password, database: database, port: port, characterSet: nil, connectionTimeout: 10000, poolOptions: connectionPoolOptions)
.......
let insertQuery = Insert(into: infos, values: "firstname", "surname", Parameter())
let insertGroup = DispatchGroup()
for age in 0 ... 5 {
insertGroup.enter()
connectionPool.getConnection() { connection, error in
guard let connection = connection else {
// Error Handling and return
}
connection.execute(query: insertQuery, parameters: [age]) { result in
guard result.success else {
// Error handling and return
}
print("Successfully inserted age: \(age)")
return insertGroup.leave()
}
}
}
insertGroup.wait()
执行此示例代码时,您会看到类似于以下内容的输出
Successfully inserted age: 0
Successfully inserted age: 1
Successfully inserted age: 2
Successfully inserted age: 3
Successfully inserted age: 4
Successfully inserted age: 5
这是因为连接池只允许单个任务获取该连接。 因为连接池现在为空,所以其他任务将排队等待稍后执行。 随着每个任务完成,单个连接将返回到池中,然后调用下一个任务。
在上面的示例中,使用 DispatchGroup 暂停主线程,直到所有任务完成。 这是必要的,因为对 connectionPool.getConnection() 的调用会立即返回 - 任务会在稍后,在连接可用时调用。
如果增加线程池的容量,则插入的顺序将是不可预测的,因为它们能够在不同的连接上并发执行
Successfully inserted age: 0
Successfully inserted age: 1
Successfully inserted age: 3
Successfully inserted age: 2
Successfully inserted age: 5
Successfully inserted age: 4
查看 Swift-Kuery 文档,了解有关使用 Swift-Kuery 框架的详细信息。
要运行 swift test
以验证您的 MySQL 安装,您必须首先运行以下命令来设置您的 MySQL
mysql_upgrade -uroot || echo "No need to upgrade"
mysql -uroot -e "CREATE USER 'swift'@'localhost' IDENTIFIED BY 'kuery';"
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test;"
mysql -uroot -e "GRANT ALL ON test.* TO 'swift'@'localhost';"
有关更多信息,请访问我们的 API 参考。
我们很乐意讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 与团队见面!
如果您在您使用 Cloud Foundry Swift 构建包部署的应用程序中将 SwiftKueryMySQL 作为依赖项包含,那么您需要在编译您的应用程序时指定一些额外的标志。 最好的方法是向您的应用程序的根目录添加一个名为 .swift-build-linux-options 的文件,内容如下:
$ cat .swift-build-options-linux
-Xcc -I/usr/include/mysql/
这些标志告诉编译器在哪里找到构建 CMySQL 库所需的 MySQL 头文件。
此库是在 Apache 2.0 许可下发布的。 完整的许可证文本可在 LICENSE 中找到。