swift小白
我现在做的是对一个已有的本地数据库"data.s3db"查询的app。
已经使用FMDB库,现在的问题是,输出的数组print后为0x60000013edc0这样的数字……是编码方式不对吗?
1.这是模型scoreModel.swift
import Foundation
import UIKit
class scoreModel: NSObject {
var lessonName:String = String()
var lessonCode:String = String()
var creditPoint:Double = Double()
var totalStudentNumber:Int = Int()
var teacherName:String = String()
var semesterName:String = String()
var scoreValue:String = String()
var studentCount:Int = Int()
}
2.这是数据库管理类SQLiteManager.swift
import Foundation
import UIKit
class SQLiteManager: NSObject {
// 0. 将类设计成单例
static let shareInstance : SQLiteManager = SQLiteManager()
override init() {
super.init()
}
// 1. 保存数据库队列对象
var dbQueue : FMDatabaseQueue?
// 2. 打开数据库
func openDB () {
//2.1 设置数据库的路径;
let dbPath = Bundle.main.path(forResource:"data", ofType: "s3db")
//2.2 创建数据库
dbQueue = FMDatabaseQueue(path: dbPath)
}
// 3. 查询数据库,并将数据以数组的形式返回:
func queryDB(sql: String) -> NSMutableArray {
openDB ();
// 3.1 创建可变数组
let resultArray = NSMutableArray()
// 3.2 执行sql
SQLiteManager.shareInstance.dbQueue?.inDatabase { (db) in
let dbResult: FMResultSet! = db.executeQuery(sql, withArgumentsIn:[])
// 遍历结果
while dbResult.next() {
let model:scoreModel = scoreModel()
model.lessonName = String(dbResult.string(forColumn: "lessonName")!)
model.lessonCode = String(dbResult.string(forColumn: "lessonCode")!)
model.creditPoint = Double(dbResult.double(forColumn: "creditPoint"))
model.semesterName = String(dbResult.string(forColumn: "semesterName")!)
model.teacherName = String(dbResult.string(forColumn: "teacherName")!)
model.totalStudentNumber = Int(dbResult.int(forColumn: "totalStudentNumber"))
model.scoreValue = String(dbResult.string(forColumn: "scoreValue")!)
model.studentCount = Int(dbResult.int(forColumn: "studentCount"))
// 添加到可变数组
resultArray.add(model)
}
}
return resultArray
}
}
3.这是操作页面ViewController.swift,SQL语句已经经过SQLiteStudio检验,我选了“%C%”为条件。
override func viewDidLoad() {
super.viewDidLoad()
//准备sql语句
let mysql = "SELECT Lesson.lessonName,Lesson.lessonCode, Lesson.creditPoint, Course.totalStudentNumber, Teacher.name AS teacherName, Semester.name AS semesterName, Score.scoreValue, Score.studentCount FROM (Lesson INNER JOIN Course ON Lesson.id = Course.lesson_id) LEFT JOIN Score ON Course.id = Score.course_id LEFT JOIN Teacher ON Course.teacher_id = Teacher.id LEFT JOIN Semester ON Course.semester_id = Semester.id WHERE Lesson.lessonName like '%C%' ORDER BY Semester.name desc"
let resultArray = SQLiteManager.shareInstance.queryDB(sql:mysql)
print(resultArray)
}
输出结果为:
"<test.scoreModel: 0x600000135400>",
"<test.scoreModel: 0x604000135c20>",
"<test.scoreModel: 0x604000135cc0>",
"<test.scoreModel: 0x604000135d60>",
"<test.scoreModel: 0x604000135e00>",
"<test.scoreModel: 0x604000135ea0>",
"<test.scoreModel: 0x604000135f40>",
"<test.scoreModel: 0x604000135fe0>",
一脸蒙蔽……
用SQLiteStudio进行语句查询的结果都是正常的啊,类似
高等数学C(下) MATH120006.01 4 70 29 杭国明 2010~2011学年第2学期 A 4
你需要重写
description
和debugDescription
。