从FMDB数据库中获取数据

Nishant narola

在我的应用程序中,我想从FMDB数据库中获取数据,并希望发送该数据以观看。但是问题在于,当获取数据时,它不会在控制台中显示实际数据,例如ticket_type = Movie,time = 11:42 pm,而是仅显示内存地址结果。

我的TicketData的源代码如下

class TicketData: NSObject {
var field1: String?
var field2: String?
var field3: String?
var field4: String?

override init() {
    super.init()
}

convenience init(field1: String, field2: String, field3: String, field4: String) {
   self.init()

        self.field1 = field1
        self.field2 = field2
        self.field3 = field3
        self.field4 = field4

}

}

我的应用程序的屏幕截图是我的应用程序的屏幕截图 图像

我的源代码如下

class TicketDetailViewController: UIViewController, WCSessionDelegate {

var databasePath = NSString()
var holding_Ticket_category: String = ""
var holding_Image: UIImage?
var hold_ticketName: String = ""
var hold_ticketDate: String = ""
var hold_ticketTime: String = ""
var session: WCSession!
var ticketDataArray:[TicketData] = []


@IBOutlet weak var ticket_grey: UIImageView!
@IBOutlet weak var cropped_frame: UIImageView!
@IBOutlet weak var display_image: UIImageView!
@IBOutlet weak var ticket_type_name: UILabel!
@IBOutlet weak var ticket_date: UILabel!
@IBOutlet weak var ticket_time: UILabel!
@IBOutlet weak var ticket_category: UILabel!


override func viewDidLoad()
{
    super.viewDidLoad()

    if WCSession.isSupported(){
        self.session  = WCSession.defaultSession()
        self.session.delegate = self
        self.session.activateSession()
    }

    display_image.image = holding_Image
    ticket_type_name.text = hold_ticketName
    ticket_date.text = hold_ticketDate
    ticket_time.text = hold_ticketTime
    ticket_category.text = holding_Ticket_category

    let filemgr =  NSFileManager.defaultManager()
    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let docsDir = dirPaths[0]
    var ticketDB: FMDatabase

    databasePath = (docsDir as NSString).stringByAppendingPathComponent("ticket_Pass.sqlite")


    if !filemgr.fileExistsAtPath(databasePath as String)
    {

        ticketDB = FMDatabase(path: databasePath as String)
        if ticketDB.open()
        {

            let sql_stmt = "CREATE TABLE IF NOT EXISTS TICKET (ID INTEGER PRIMARY KEY AUTOINCREMENT, IMAGE TEXT, TICKET_CATEGORY TEXT, TICKET_TYPE TEXT, DATE TEXT, TIME TEXT)"
            if !ticketDB.executeStatements(sql_stmt)
            {
                print("Error: \(ticketDB.lastErrorMessage())")
            }
            ticketDB.close()
        } else
        {

            print("Error: \(ticketDB.lastErrorMessage())")
        }
    }
}

@IBAction func addTickets(sender:UIButton){

    let ticketDB = FMDatabase(path: databasePath as String)
    if ticketDB.open()
    {

            let insertSQL = "INSERT INTO TICKET (image, ticket_category, ticket_type, date, time) VALUES ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')"

            let result = ticketDB.executeUpdate(insertSQL,withArgumentsInArray: nil)

            if !result
            {

                print("Error: \(ticketDB.lastErrorMessage())")

            } else
            {

                let alt = PMAlertController(title: "Success!", description: "Your data is saved to Database!", image: UIImage(named: ""), style: .Alert)

                alt.addAction(PMAlertAction(title: "OK!", style: .Default, action: { (ACTION) -> Void in

                         self.navigationController?.popToRootViewControllerAnimated(true)

                }))

                        self.presentViewController(alt, animated: true, completion: nil)
                        print(databasePath)


           }
    }
}


@IBAction func deleteTickets(sender: UIButton) {
    let alt = PMAlertController(title: "Delete Ticket Details!", description: "Are you sure?", image: UIImage(named: ""), style: .Alert)

    alt.addAction(PMAlertAction(title: "Cancel", style: PMAlertActionStyle.Default, action: { (ACTION) -> Void in

        self.dismissViewControllerAnimated(true, completion: nil)

    }))
    alt.addAction(PMAlertAction(title: "OK", style: PMAlertActionStyle.Default, action: { (ACTION) -> Void in

        self.navigationController?.popToRootViewControllerAnimated(true)
    }))
    self.presentViewController(alt, animated: true, completion: nil)
}


@IBAction func sendToWatch(sender: AnyObject) {


    let ticketDB = FMDatabase(path: databasePath as String)
    if ticketDB.open()
    {

        let insertSQL = "INSERT INTO TICKET (image, ticket_category, ticket_type, date, time) VALUES ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')"

        let result = ticketDB.executeUpdate(insertSQL,withArgumentsInArray: nil)

        if !result
        {

            print("Error: \(ticketDB.lastErrorMessage())")

        } else
        {

            let alt = PMAlertController(title: "Success!", description: "Your data is saved to Database!", image: UIImage(named: ""), style: .Alert)

            alt.addAction(PMAlertAction(title: "OK!", style: .Default, action:
                { (ACTION) -> Void in

                    let ticketDB = FMDatabase(path: self.databasePath as String)
                    if ticketDB.open()
                    {

                        let querySQL = "SELECT * FROM TICKET"

                        let result: FMResultSet? = ticketDB.executeQuery(querySQL, withArgumentsInArray: nil)

                        if let result = result
                        {

                           var ticketData = TicketData()
                            while (result.next() == true)
                            {
                                let image = result.stringForColumn("image")
                                let ticket_category = result.stringForColumn("ticket_category")
                                let ticket_type = result.stringForColumn("ticket_type")
                                let date = result.stringForColumn("date")
                                let time = result.stringForColumn("time")
                                ticketData = TicketData(field1: ticket_category!, field2: ticket_type!, field3: date!, field4: time!, field5: image!)
                                 self.ticketDataArray.append(ticketData)


                            }
                        print("Data: \(result.resultDictionary())")


                            }


                       }else
                       {
                            print("Error: \(ticketDB.lastErrorMessage())")

                       }

                    ticketDB.close()


                    }

            }))

            self.presentViewController(alt, animated: true, completion: nil)
            print(databasePath)

        }
    }
病态的

ticketData是一个对象,您正尝试使用来打印一个对象,

print("Data: \(ticketData)")

每当我们尝试打印对象时,总是会打印对象的内存地址,而不是对象的属性。如果要打印对象属性,请一一打印,

print("Data: \(ticketData.ticket_type)")

等等。如果要一次打印所有内容,您可以做的是从resultSet中获取一个字典对象并进行打印。

print("Data:\(resultSet.resultDictionary())")

编辑:如何获取结果集的最后一个值。

if let result = result {

var ticketData = TicketData()
var latestTicketDict = [String: AnyObject]()

while (result.next() == true) {
    let image = result.stringForColumn("image")
    let ticket_category = result.stringForColumn("ticket_category")
    let ticket_type = result.stringForColumn("ticket_type")
    let date = result.stringForColumn("date")
    let time = result.stringForColumn("time")
    ticketData = TicketData(field1: ticket_category!, field2: ticket_type!, field3: date!, field4: time!, field5: image!)
    self.ticketDataArray.append(ticketData)
    latestTicketDict = result.resultDictionary()
}

print("Data: \(latestTicketDict)")

}

更新:另外,我建议您仔细阅读其github页面上的FMDB文档,并研究有关FMDB的一些教程,以编写更有效的数据库操作。另外,请勿关闭数据库并为每个数据库操作打开数据库,因为FMDB的创建者说何时关闭SQLite数据库(使用FMDB) -

“除非更改架构,否则请保持打开状态。这是关闭它的唯一原因,而不断重新打开它会对性能/电池寿命造成一定的影响。”

我也建议您看一下FMDatabaseQueue。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FMDB(SQL)试图从数据库(iOS)获取阵列

来自分类Dev

无法使用SWIFT更新数据库FMDB中的字段

来自分类Dev

无法使用SWIFT更新数据库FMDB中的字段

来自分类Dev

FMDB:更新时数据库被锁定

来自分类Dev

从数据库中的表获取数据

来自分类Dev

从UserSpice中的数据库获取数据

来自分类Dev

无法从数据库中获取数据

来自分类Dev

如何从数据库中获取数据?

来自分类Dev

从UserSpice中的数据库获取数据

来自分类Dev

PHP从数据库中获取数据

来自分类Dev

结果集即使数据库FMDB Swift中也有数据也返回nil

来自分类Dev

如何使用FMDB在SQLite数据库中保存数据?

来自分类Dev

关于FMDB(Objective-C数据库库)的错误

来自分类Dev

关于FMDB(Objective-C数据库库)的错误

来自分类Dev

如何获取数据库中的数据数据

来自分类Dev

FMDB数据库无法在设备上运行,但可以在模拟器中运行

来自分类Dev

从数组中的数据库获取多行

来自分类Dev

在Django中获取数据库类型

来自分类Dev

情绪从数据库中获取价值

来自分类Dev

从数据库中获取变量的价值

来自分类Dev

在PHP中获取数据库结果

来自分类Dev

在mysql中获取Wikipedia数据库?

来自分类Dev

从数据库中获取Guid

来自分类Dev

情绪从数据库中获取价值

来自分类Dev

从数据库中获取价值

来自分类Dev

从数据库中获取价值

来自分类Dev

TCPDF 从数据库中获取值

来自分类Dev

添加从数据库中获取的数字

来自分类Dev

从数据库中获取的值的长度