美文网首页
Perfect 数据库操作

Perfect 数据库操作

作者: HCong | 来源:发表于2017-04-12 11:17 被阅读39次

mongoDB

func resignRoutes() {
  // mongoDB数据库test,collection为test的数据展示
  routes.add(method: .get, uri: "/mongodb/test") { (req, resp) in
        resp.appendBody(string: collectionName(name: "test"))
        resp.completed()
  }
   // mongoDB数据库test,collection为info的数据展示
  routes.add(method: .get, uri: "/mongodb/info") { (req, resp) in
        
        resp.appendBody(string: collectionName(name: "info"))
        resp.completed()
  }
 // 表单提交,向collection为info中添加数据
  routes.add(method: .post, uri: "/mongodb/add") { (req, resp) in
        do {
            // 启动数据库
            let mongodb = try MongoClient(uri: "mongodb://localhost")
            // 获取数据库
            let database = mongodb.getDatabase(name: "test")
            // 获取collection
            let collection = database.getCollection(name: "info")
            
            defer {
                collection?.close()
                database.close()
                mongodb.close()
            }
            // 处理请求参数,格式化
            let params:[(String,String)] = req.postParams
            
            var json = "{"
            
            for param in params {
                let str = "\"" + param.0 + "\"" + ":" + "\"" + param.1 + "\"" + ","
                json.append(str)
            }
            
            
            let range = Range<String.Index>(json.index(json.endIndex, offsetBy: -1)..<json.endIndex)
            
            json.replaceSubrange(range, with: "}")
            
            let bson:BSON = try BSON(json: json)
            
            let result = collection?.insert(document: bson)
            
            resp.appendBody(string: result.debugDescription)
            resp.completed()
            
            
        } catch {
            print(error)
        }
        
    }

    server.addRoutes(routes)
}
func collectionName(name:String) ->  String{
    do {
        // 1.连接数据库
        let client = try MongoClient(uri: "mongodb://localhost")
        // 1.获取数据库名字
        print(client.databaseNames())
        // 2.获取指定名称的数据库
        let db = client.getDatabase(name: "test")
        // 2.获取数据库collection名称
        print(db.collectionNames())
        // 3.获取指定名称collection
        let collection = db.getCollection(name: name)
        
        defer{
            // 在该请求结束时确保关闭collection,db,client
            collection?.close()
            db.close()
            client.close()
        }
        // 查询数据,返回查询游标
        let find = collection?.find(query: BSON())
        
        
        var arr:[[String:Any]] = [[String:Any]]()
        for fin in find! {
            let encode = fin.asString
            // json字符串解码
            let decode = try encode.jsonDecode() as! [String:Any]
            
            arr.append(decode)
        }
        
        let result = ["message":arr]
        // 字典数据编码为json字符串
        let jsonStr = try result.jsonEncodedString()
        
        return jsonStr
    } catch {
        print(error)
        return ""
    }
}

MySQL

fileprivate let mysql_host = "localhost"
fileprivate let mysql_user = "root"
fileprivate let mysql_pwd = ""
fileprivate let mysql_db = "test"
fileprivate let mysql_socket = "/tmp/mysql.sock"

func resignRoutes() {
   routes.add(method: .get, uri: "/mysql") { (req, resp) in
        let dataMysql = MySQL()  // create an instance of mySQL to work with
        
        // connect to database
        let connect = dataMysql.connect(host: mysql_host, user: mysql_user, password: mysql_pwd, db: mysql_db, socket: mysql_socket)
        
        guard connect else {
            // failed to connect database
            print(dataMysql.errorMessage())
            return
        }
        
        defer {
            // close database when already used
            dataMysql.close()
        }
        
        // create tables
        let sql = "create table if not exists person (id integer primary key AUTO_INCREMENT, name varchar(50), age int)"
        if (dataMysql.query(statement: sql)){
            print("Success")
            resp.appendBody(string: "connect mysql success!")
            resp.completed()
        }
    }
    
    routes.add(method: .get, uri: "/mysql/add") { (req, resp) in
        let dataMysql = MySQL()
        
        let connect = dataMysql.connect(host: mysql_host, user: mysql_user, password: mysql_pwd, db: mysql_db, socket: mysql_socket)
        guard connect else {
            print(dataMysql.errorMessage())
            return
        }
        defer {
            dataMysql.close()
        }
        
        let name:String = req.param(name: "name") ?? ""
        let age:Int = Int(req.param(name: "age") ?? "0")!
        
        let sql = "insert into person (name,age) values (\(name),\(age))"
        
        if (dataMysql.query(statement: sql)){
            resp.appendBody(string: "insert person success")
        } else {
            resp.appendBody(string: "fail to insert person")
        }
        resp.completed()
    }
    
    routes.add(method: .get, uri: "/mysql/query") { (req, resp) in
        let dataMysql = MySQL()
        let connect = dataMysql.connect(host: mysql_host, user: mysql_user, password: mysql_pwd, db: mysql_db, socket: mysql_socket)
        
        guard connect else {
            resp.appendBody(string: dataMysql.errorMessage())
            resp.completed()
            return
        }
        
        defer {
            dataMysql.close()
        }
        
        let sql = "select * from person"
        if(dataMysql.query(statement: sql)){
            let results = dataMysql.storeResults()
            var person:[[String:Any]] = [[String:Any]]()
            // 数据查询
            results?.forEachRow(callback: { (element) in
                let person_id:Int = Int(element[0] ?? "0")!
                let person_name:String = element[1]!
                let person_age:Int = Int(element[2] ?? "0")!
                person.append(["id":person_id,"name":person_name,"age":person_age])
            })
            
            let respResult = ["psersons":person]
            do {
                try resp.appendBody(string: respResult.jsonEncodedString())
            } catch {
                print(error)
            }
        } else {
            resp.appendBody(string: "操作出现错误")
        }
        resp.completed()
    }

    server.addRoutes(routes)
}

SQLite

// 需要在产品目录下创建db文件夹,其他路径没有尝试过
fileprivate let sqlite_dbpath = "./db/database"

func resignRoutes() {
   routes.add(method: .get, uri: "/sqlite3") { (req, resp) in
        
        do {
            let sqlite = try SQLite(sqlite_dbpath)
            
            defer {
                sqlite.close()
            }
            
            let sql = "create table if not exists person (id integer primary key AUTOINCREMENT, name text, age int)"
            try sqlite.execute(statement: sql)
            resp.appendBody(string: "Success!")
            resp.completed()
        } catch {
            print(error)
        }
    }
    
    routes.add(method: .get, uri: "/sqlite3/add") { (req, resp) in
        
        do {
            let sqlite = try SQLite(sqlite_dbpath)
            
            let person_name:String = req.param(name: "name") ?? ""
            let person_age:Int = Int(req.param(name: "age") ?? "0")!
            
            let sql = "insert into person (name, age) values (\(person_name),\(person_age))"
            try sqlite.execute(statement: sql)
            
            resp.appendBody(string: "Success!")
            resp.completed()
            
        } catch {
            print(error)
        }
    }
    
    routes.add(method: .get, uri: "/sqlite3/query") { (req, resp) in
        
        do {
            let sqlite = try SQLite(sqlite_dbpath)
            let sql = "select * from person"
            
            var result:[[String:Any]] = [[String:Any]]()
            
            try sqlite.forEachRow(statement: sql, handleRow: { (stmt, index) in
                let id:Int = stmt.columnInt(position: 0)
                let name:String = stmt.columnText(position: 1)
                let age:Int = stmt.columnInt(position: 2)
                let temp:[String:Any] = ["id":id,"name":name,"age":age]
                result.append(temp)
            })
            
            let lastResult = ["persons":result]
            try resp.appendBody(string: lastResult.jsonEncodedString())
            resp.completed()
        } catch {
            print(error)
        }
    }
    
    
    server.addRoutes(routes)

}

相关文章

  • Perfect 数据库操作

    mongoDB MySQL SQLite

  • MySQL数据库管理使用

    RPM安装MySQL 启动数据库操作: 重启数据库操作: 停止数据库操作: 查看数据库状态: 登录数据库操作: 退...

  • Perfect 数据库篇

    工具篇 MySQL Mac自带MySQL 工具, 导入依赖包.package(url: "https://gith...

  • python 教程笔记day10

    Python3 MySQL 数据库连接 数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 ...

  • 2018-04-05

    It may not be perfect but it's perfect and perfect in my ...

  • PHP笔记

    表单 数据库 session 数据库操作1 数据库操作2 .htaccess

  • Statement执行DQL语句

    一.数据库插入操作 二.数据库跟新操作 三.删除操作

  • node

    数据库(database) 概念 数据库常用类型 Node 操作数据库 数据库常用操作

  • MySQL之操作数据库

    二、操作数据库 操作数据库——>操作数据库中的表——>操作数据库中表的数据注:所有语句都要用;结尾。 1.操作数据...

  • 数据库的简单操作

    操作数据库 操作数据库 > 操作数据库中的表 > 操作数据库中表的数据 MySQL关键字不分大小写 2.1 操作数...

网友评论

      本文标题:Perfect 数据库操作

      本文链接:https://www.haomeiwen.com/subject/onzpattx.html