首页 > 解决方案 > 面临有关从 swift 中从 sqlite 的特定列中获取数据的问题

问题描述

在使用iOS应用程序时..我在从sqlite获取数据时遇到问题...下面是我用于从数据库中获取数据的代码...

func getQazaNmazdata() -> [QazaDB]
    {
        var dbData = [QazaDB]()
        let qstring = "select Counter from Qaza"
        var queryStatement: OpaquePointer? = nil
        // 1
        if sqlite3_prepare_v2(db, qstring, -1, &queryStatement, nil) == SQLITE_OK {
            let data = QazaDB()
            while sqlite3_step(queryStatement) == SQLITE_ROW
            {
                let counter = sqlite3_column_int(queryStatement, 0)
                data.counter = Int(counter)
                dbData.append(data)
            } // while loop end

     } // if end
        var n:Int = 0
        for i in dbData
        {
            print("Value of Counter at Row " + String(n) + " = " + String(i.counter))
            n += 1
        }

    return dbData

   } 

我从运行上述代码收到的结果是

Value of Counter at Row 0 = 8
Value of Counter at Row 1 = 8
Value of Counter at Row 2 = 8
Value of Counter at Row 3 = 8
Value of Counter at Row 4 = 8

这些值在行中重复..

数据库中表的图像.. 我正在尝试获取列 Counter 的值

标签: iosswiftsqliteswift4

解决方案


我怀疑 QazaDB 是一个引用类型(类),因此它只显示最后分配的值。可能您需要更改 while 循环,例如:

while sqlite3_step(queryStatement) == SQLITE_ROW
{
   let data = QazaDB()
   let counter = sqlite3_column_int(queryStatement, 0)
   data.counter = Int(counter)
   dbData.append(data)
} // while loop end

您还可以将 QazaDB 更改为结构,这也可以解决问题。


推荐阅读