使用未申报的类型' sqlite3_stmt'

时间:2017-02-20 10:48:37

标签: ios sqlite swift3

我正在尝试在Swift 3.0中的Sqlite中插入一个值。但我收到错误"使用未声明的类型' 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")
        }
    }

2 个答案:

答案 0 :(得分:3)

您的statement应为COpaquePointer类型,并使用&amp; Statement

进行访问
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)
    }

答案 1 :(得分:0)

看起来您可能正在尝试使用Cite库为SQLite 3和Swift集成SQLite 3数据库。哎呀!这是可能的,但有点冒险。

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

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