Неизвестная функция C.sqlite3 и неверный параметр или другое неправильное использование API

Если sqlite3_open_v2 закомментирован, он выдает ошибку: неизвестная функция C.sqlite3, что странно, почему прототип должен влиять db :=C.sqlite3(0)? Но если он прокомментирован, я получаю неверный параметр или другое неправильное использование API. Что я делаю неправильно?

import sqlite

//fn C.sqlite3_open_v2(charptr, &&C.sqlite3, int, charptr) int
struct C.sqlite3_stmt { }

fn main(){
    db := &C.sqlite3(0)
    stm := &C.sqlite3_stmt(0)
    db_path := ':memory:'
    query := 'select 1'

    C.sqlite3_open(db_path.str, &db)
    err := C.sqlite3_prepare_v2(&db, query.str, -1, &stm, C.NULL)
    if err != C.SQLITE_OK {
      C.puts(C.sqlite3_errstr(err))
    }
    C.sqlite3_close(db)
}

1 ответ

Вы импортируете, фактически не используя его. в sqliteмодуль, есть функции-оболочки, чтобы делать то, что вы хотите. Вот как вы это сделаете:

      import sqlite

fn main() {
    db_path := ':memory:'
    db := sqlite.connect(db_path) or {
        panic(err)
    }
    query := 'select 1'
    val, code := db.exec(query) // declare code as 'mut' so it can be reused later
    assert code == 101 // 101 is the same as C.SQLITE_DONE
    println('$val') // prints the following:
    // [sqlite.Row{
    //     vals: ['1']
    // }]
    // No closing right now, not sure if it's in the works or needed
}
Другие вопросы по тегам