摘要:网上查询OHMySQL,大多是用OC语言写的例子,我现在写一个swift的例子。另,很多文章都说到APP直连数据库是不安全的。
PS:安装OHMySQL我是用CocoPods快速导入的,在Podfile文件中加上 pod 'OHMySQL' ,然后在项目路径运行 pod install 指令即可,没安装CocoPods移步到:https://blog.youkuaiyun.com/amberoot/article/details/84108073。MySQL的安装也请另行百度,网上很多。这里附上OHMySQL的GitHub地址是:https://github.com/oleghnidets/OHMySQL
一、我的做法是先初始化需要的变量
//初始化OHMySQL协调器
var coordinator = OHMySQLStoreCoordinator()
//初始化上下文
let context = OHMySQLQueryContext()
let dbName = "Task1"//数据库模块名称
let tableName = "Login"//表名
///MySQL Server
let SQLUserName = "root"//数据库用户名
let SQLPassword = "123456"//数据库密码
//数据库名称,如果是用模拟器连接电脑本地数据库,默认是localhost;若用iPhone或iPad远程连接数据库,数据库名称填写其IP地址
let SQLServerName = "localhost"
let SQLServerPort: UInt = 3306//数据库端口号,默认是3306
二、连接MySQL
///初始化用户
//mac本地socket为/tmp/mysql.sock,远程连接socket直接为nil即可
let user = OHMySQLUser(userName: SQLUserName, password: SQLPassword, serverName: SQLServerName, dbName: dbName, port: SQLServerPort, socket: nil)
coordinator = OHMySQLStoreCoordinator(user: user!)
coordinator.encoding = .UTF8MB4//编码方式
coordinator.connect()//连接数据库
coordinator.disconnect()//与数据库断开连接
三、判断数据库连接状态
//判断是否成功数据库
let sqlConnected: Bool = coordinator.isConnected
//连接成功后保存协调器到当前的上下文,即可不用每次操作数据库都要重新连接
context.storeCoordinator = coordinator
//也可ping服务器查询连接状态
switch coordinator.pingMySQL() {
case .none:
//数据库连接成功
break
case .sync:
//命令以错误的顺序执行
break
case .gone:
//MySQL服务器已经丢失
break
case .lost:
//与服务器的连接丢失
break
case .unknown:
//未知错误
break
}
三、增删改查
"Login"表格如下,有username和password两列。
username | password |
amberoot | 000 |
amberoot1 | 123 |
amberoot2 | 33 |
下面是查询和增、删、改操作的请求:
//SELECT - 查询
let query = OHMySQLQueryRequestFactory.select(tableName, condition: "username = 'amberoot'")
//INSERT - 增
let query2 = OHMySQLQueryRequestFactory.insert(tableName, set: ["username": "amberoot2", "password": "33"])
//DELETE - 删
let query3 = OHMySQLQueryRequestFactory.delete(tableName, condition: "username = 'amberoot'")
//UPDATE - 改
let query4 = OHMySQLQueryRequestFactory.update(tableName, set: ["password": "10000"], condition: "username = 'amberoot2'")
下面是执行请求操作(查询的请求会返回的数据格式为[[String:Any]]):
do {
//查询
let response = try context.executeQueryRequestAndFetchResult(query)
print("response:\(response as Any)")
//增、删、改
try context.execute(query2)
try context.execute(query3)
try context.execute(query4)
}catch {
print("MySQL_Error:\(error)")
}