3

我正在尝试将数组中的数据插入我的表中。如果插入完成,我认为它应该在控制台中打印它,但事实并非如此。所以我尝试了 db.trace(println) 它告诉我

选择 * 从“格式化数据 1”

我的 createDatabase 函数:

    func createDatabase(){
        var data = db["formatedData1"]

        db.create(table: data, ifNotExists: true){ d in
            d.column(type, primaryKey: true)
            d.column(ada)
            d.column(code)
            d.column(name)
            d.column(proof)
            d.column(size)
            d.column(case_size)
            d.column(price)
        }

        for var i = 0; i < self.dataArrayMut.count; ++i{
            data.insert(type <- (self.dataArrayMut[i].valueForKey("Type") as! String), ada <- (self.dataArrayMut[i].valueForKey("ADA") as! String), code <- (self.dataArrayMut[i].valueForKey("Code") as! String), name <- (self.dataArrayMut[i].valueForKey("Name") as! String), proof <- (self.dataArrayMut[i].valueForKey("Proof") as! String), size <- (self.dataArrayMut[i].valueForKey("Size") as! String), case_size <- (self.dataArrayMut[i].valueForKey("CaseSize") as! String), price <- (self.dataArrayMut[i].valueForKey("Price") as! String))
        }

        db.trace(println)
    }

然后我尝试对表运行查询以查看数据是否存在。

第一个查询:

//Select * From data
let all = Array(data)
println(all.description)

当我打印它时,我得到

[SQLite.Row, SQLite.Row, SQLite.Row, SQLite.Row, SQLite.Row, SQLite.Row, SQLite.Row, SQLite.Row]

第二次查询

    //Select name From data where type = rum
    let query = data.select(name)
                    .filter(type == "Rum")

    println(query)

当我打印它时,我得到

"formatedData1"

第三个查询我只想从两列打印所有行。

    for datas in data.select(type, name){
        println("type: \(data[type]), name: \(data[name])")
    }

它打印

SELECT "Type", "Name" FROM "formatedData1"
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>
type: SQLite.Expression<Swift.String>, name: SQLite.Expression<Swift.String>

对不起,很长的问题,但任何帮助将不胜感激。

4

1 回答 1

2

SQLite.swift 本身不会将insert结果打印到控制台,您必须执行以下操作:

let (id, statement) = data.insert(type <- (self.dataArrayMut[i].valueForKey("Type") as! String))

然后您可以检查id并将statement结果打印到控制台:

if let dbRowID = id {
    println("New entry: \(dbRowID)")
} else if statement.failed {
    println("Row insertion failed because \(statement.reason!)")
}

要访问行内容,您需要使用 db 中定义的类型,而不是文字:

let all = Array(data)
for row in all {
    let name = row[self.name]
    println(name)
}

self.name是由包含 , 的类创建的类型之一createDatabase(),对应于您的列之一。

编辑:

您可以Row通过下标(data[name],其中name是 type Expression)或通过它的 get 方法(data.get(name))来访问 a 的内容。

回答您的评论:如果您这样做data[42],则意味着获得 42nd Row,而不是列。有了这个Row,您就可以使用Expression我刚刚解释过的方法来获取您的专栏内容。

请注意,在 Xcode 中,使用 ALT+CLICK 您可以查看任何变量的类型,它可以帮助您跟踪数据流。

于 2015-06-09T18:33:38.150 回答