我正在尝试将数组中的数据插入到我的表中。如果插入完成,我想,它假设在控制台中打印它,但事实并非如此。所以我尝试了db.trace(println)并向我展示了
SELECT * FROM" formatedData1"
我的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>
很抱歉这个问题很长,但我们非常感谢您的帮助。
答案 0 :(得分: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
)或其get方法({{1}来访问Expression
的内容}})。
要回答您的评论:如果您执行data.get(name)
,则表示获取第42个data[42]
,而不是列。使用此Row
,您可以使用我刚刚解释过的Row
来获取您的列内容。
请注意,在Xcode中,使用ALT + CLICK,您可以看到任何变量的类型,它可以帮助您跟踪数据流。