我从swift中的sqlite表中得到了错误的值

我从swift中的sqlite表中得到了错误的值,swift,sqlite,Swift,Sqlite,我从sqlite表中得到了错误的值。这是我的密码 代码: var arrtribute_Mast_List : NSMutableArray = [] var querySQL = String(format:"SELECT * FROM %@ ORDER BY %@", TABLE_ATTRIBUTE_MASTER, ATTRIBUTE_MASTER_ATTR_ID) var statement:COpaquePointer = nil //querySQL =

我从sqlite表中得到了错误的值。这是我的密码

代码:

    var arrtribute_Mast_List : NSMutableArray = []
    var querySQL = String(format:"SELECT * FROM %@ ORDER BY %@", TABLE_ATTRIBUTE_MASTER, ATTRIBUTE_MASTER_ATTR_ID)
    var statement:COpaquePointer = nil
    //querySQL =   querySQL.String(NSUTF8StringEncoding, allowLossyConversion: false)

    if (sqlite3_prepare_v2(database, querySQL, -1, &statement, nil) == SQLITE_OK) {
        while(sqlite3_step(statement) == SQLITE_ROW) {
            let name  = sqlite3_column_text(statement, 2)
            let attributeName = String.fromCString(UnsafePointer<CChar>(name))
            println("Attribute value = \(attributeName)")
         }
        sqlite3_finalize(statement);

    }
需要输出:

   Attribute value = "Shamitabh"

您得到的是
可选(“Shamitabh”)
,因为
String.fromCString
不能保证成功。它可能会失败,
attributeName
将为零。您可以通过使其成为隐式展开的可选项(如果
String.fromCString
失败,则会崩溃)来解决此问题:

让attributeName=String.fromCString(UnsafePointer(name))!
。。或者,您可以在使用它之前正确地执行该操作并检查该值是否为零。例如,像这样:

 if let attributeName = String.fromCString(UnsafePointer<CChar>(name)) {
      println("Attribute value = \(attributeName)")
 } else {
      println("Couldn't get the attribute name")
 } 
如果让attributeName=String.fromCString(UnsafePointer(name)){
println(“属性值=\(attributeName)”)
}否则{
println(“无法获取属性名”)
} 

您不能打开可选的包装吗?您的输出和您想要的输出基本相同,只是第一个是可选的。在我的表中,列值是“Shamitabh”。但是我得到了可选的(“Shamitabh”),你知道可选值是什么吗?展开可选值是什么?
 let attributeName = String.fromCString(UnsafePointer<CChar>(name))!
 if let attributeName = String.fromCString(UnsafePointer<CChar>(name)) {
      println("Attribute value = \(attributeName)")
 } else {
      println("Couldn't get the attribute name")
 }