美文网首页
数据库基础、FMDB

数据库基础、FMDB

作者: 写啥呢 | 来源:发表于2016-09-23 08:55 被阅读0次

数据库基础

class ViewController: UIViewController {
    //MARK: - 属性
    //1.数据库
    lazy var db:FMDatabase = {
       
        //a.创建数据库对象
        //参数1:数据库文件路径(实际在开发过程中是沙盒下的一个路径)
        //注:数据库文件的后缀是.sqlite或者.db
        let tdb = FMDatabase.init(path: "/Users/qianfeng1/Desktop/项目位置/网络阶段/网络阶段第二周/第二周第4天/01-数据库基础/test1.sqlite")
        //b.打开数据库
        let ret = tdb.open()
        if ret == true {
            print("数据库打开成功")
        }
        else {
            print("数据库打开失败")
        }
        return tdb
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
//        self.createTable()
        print(self.db)
//        self.insertData()
//        for item in 0...100 {
//            let name = "name\(item)"
//            let age = Int(arc4random()%15)+15
//            let sex = arc4random()%2 == 0 ? "女" : "男"
//            self.insertData(name, age: age, sex: sex)
//        }
//        self.updateData()
//        self.deleteData()
        self.getData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

//MARK: - 数据库操作
extension ViewController {
    
    //MARK: - 数据查询
    func getData() {
        
        //1.创建数据查询的sql语句
        let sqlStr = "SELECT * FROM t_Person"
        //2.执行sql语句
        //参数1:需要执行的查询语句
        //参数2:sql语句中的占位符对应的值
        //返回值:查询结果
       let dataSet = self.db.executeQuery(sqlStr, withArgumentsInArray: [])

        //3.获取结果集中的数据
        //默认指向第一个结果到前一个位置,所以第一次调用next方法就是指向第一个结果,再调用就指向第二个结果
        while dataSet.next() {
            
            //获取每个结果的内容
            //a.字符串和二进制通过object开头的方法去获取值
            let name = dataSet.objectForColumnName("name")

            //b.获取整型数据使用int开头的方法
            let age = dataSet.intForColumn("age")
            let sex = dataSet.objectForColumnName("sex")
            
            //c.获取浮点型数据使用double开头的方法
            
//            let score = dataSet.doubleForColumn("score")
            
            print("\(name)\(age)\(sex)")
        }
        
    }
    
    
    
    //MARK: - 删除数据
    func deleteData() {
        
        //1.创建删除语句
        let sqlStr = "DELETE FROM t_Person WHERE age<21 and sex='男';"
        let ret = self.db.executeUpdate(sqlStr, withArgumentsInArray: [])
        if ret {
            print("删除成功")
        }else {
             print("删除失败")
        }
    }
    
    
    
    //MARK: - 更新数据
    func updateData() {
       let sqlStr = "UPDATE t_Person SET age = 18 WHERE age<18;"
        let ret = self.db.executeUpdate(sqlStr, withArgumentsInArray: [])
        if ret {
            print("更新成功")
        }
        else {
            print("更新失败")
        }
    }
    
    
    //MARK: - 插入多条数据
    func  insertData(name:String,age:Int,sex:String) {
        
        //1.创建 插入数据对应的sql语句
        //'?'是sql语句中的占位符。sql语句中有不确定的值可以使用问号来代替,在执行sql语句的时候再给这个问号对应的值赋值
        let sqlStr = "INSERT INTO t_Person(name,sex,age) VALUES(?,?,?);"
        //2.执行sql语句
        let ret = self.db.executeUpdate(sqlStr, withArgumentsInArray: [name,sex,age])
        //3.判断执行结果
        if ret {
            
            print("数据插入成功")
        }else {
            
            print("数据插入失败")
        }
    }
    
    //MARK: - 插入单条数据
    func insertData() {
        
        //1.创建 插入数据对应的sql语句
        let sqlStr = "INSERT INTO t_Person(name,sex,age) VALUES('小明','男',22);"
        //2.执行sql语句
        let ret = self.db.executeUpdate(sqlStr, withArgumentsInArray: [])
        
        //3.判断执行结果
        if ret {
            
            print("数据插入成功")
        }else {
            print("数据插入失败")
        }
    }
    
    //MARK: 创建表
    func createTable() {
        
        //1.创建 创建表的sql语句
        let sqlStr = "CREATE TABLE IF NOT EXISTS t_Person(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer DEFAULT 20,sex text DEFAULT '女');"
        //2.执行sql语句
        //参数1:需要执行的sql语句
        //参数2:sql语句中的占位符对应的值
        //参数3:SQL语句的执行结果
            let ret = self.db.executeUpdate(sqlStr, withArgumentsInArray: [])
        //3.判断执行结果
        if ret {
            print("创建表成功")
        }
        else {
            
            print("创建表失败")
        }
    }
}


相关文章

网友评论

      本文标题:数据库基础、FMDB

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