2017-02-20 89 views
1

我想在Swift 3.0中的Sqlite中插入一个值。但我得到一个错误“使用未声明的类型‘sqlite3_stmt’的。 谁能帮我解决这个问题还是让我知道,如果我做错了什么?使用未声明的类型'sqlite3_stmt'

#import <sqlite3.h> (in bridging header) 

var statement: sqlite3_stmt? = nil 
var database = DBConnectionManager.getDatabaseObject() 
var sQuery: String = "insert into tblfavoritemaster(category_type,quote_text,category_id) values('abc','test','3')" 

    if sqlite3_prepare_v2(database, sQuery.utf8, -1, statement, nil) == SQLITE_OK { 
     if sqlite3_step(statement) == SQLITE_DONE { 
      print("Insert Successfully") 
     } 
    } 

回答

3

statement应该COpaquePointer类型和访问它使用&声明

func insert() { 
     var statement: COpaquePointer = nil 

    let insertStatementString = "INSERT INTO Contact (Id, Name) VALUES (?, ?);" 

     // 1 
     if sqlite3_prepare_v2(db, insertStatementString, -1, &statement, nil) == SQLITE_OK { 
     let id: Int32 = 1 
     let name: NSString = "Ray" 

     // 2 
     sqlite3_bind_int(statement, 1, id) 
     // 3 
     sqlite3_bind_text(statement, 2, name.UTF8String, -1, nil) 

     // 4 
     if sqlite3_step(statement) == SQLITE_DONE { 
      print("Successfully inserted row.") 
     } else { 
      print("Could not insert row.") 
     } 
     } else { 
     print("INSERT statement could not be prepared.") 
     } 
     // 5 
     sqlite3_finalize(statement) 
    } 
0

看起来你可能会试图整合使用C库的SQLite 3和斯威夫特一个SQLite 3数据库。哎呀!这是可能的,但冒险。

更快,更干净的方法可能是使用ORM库,如我的LabQLite(及其关联的模型生成器工具:LabQLite Model Generator)。

否则,如果您必须直接使用低级别的SQLite 3 C库,那么是的,COpaquePointer(及其联系人......看Using Swift with Cocoa and Objective-C (Swift 3.0.1)),作为Tushar Sharma提到,可能是你所需要的。

相关问题