база данных swift sqlite3 вставляет текстовую привязку в два столбца - PullRequest
1 голос
/ 12 января 2020

Я новичок в sqlite3 и следил за несколькими учебниками онлайн. Моя проблема заключается в том, что при проверке базы данных, которую я создал, используя любую свободную gui для проверки, две мои колонки имеют одинаковые данные. Я пропускаю данные из моего первого столбца. В моем методе viewDidLoad () я сделал следующее:

let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
               .appendingPathComponent("RFDevices.sqlite")

if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
        print("error opening database")
    }

if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Devices (id INTEGER PRIMARY KEY AUTOINCREMENT, manufacturer TEXT, model TEXT, lowerfreq FLOAT, upperfreq FLOAT)", nil, nil, nil) != SQLITE_OK {
                let errmsg = String(cString: sqlite3_errmsg(db)!)
                print("error creating table: \(errmsg)")
            }

Теперь, когда создана таблица и структура, я создаю функцию для добавления значений в базу данных:

func insertSQLEntry(manufacturer:String, model:String, LowerFreq:Float, UpperFreq:Float) {
    //creating a statement
    var stmt: OpaquePointer?

    //the insert query
    let queryString = "INSERT INTO devices (manufacturer, model, lowerfreq, upperfreq) VALUES (?,?,?,?)"

    if sqlite3_prepare_v2(db, queryString, -1, &stmt, nil) == SQLITE_OK {
        sqlite3_bind_text(stmt, 1, manufacturer, -1, nil)
        sqlite3_bind_text(stmt, 2, model, -1, nil)
        sqlite3_bind_double(stmt, 3, Double(LowerFreq))
        sqlite3_bind_double(stmt, 4, Double(UpperFreq))
    }

    if sqlite3_step(stmt) != SQLITE_DONE {
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("failure inserting hero: \(errmsg)")
        return
    }
}

Теперь, чтобы добавить запись, я буду вызывать эту функцию, используя что-то вроде ниже:

insertSQLEntry(manufacturer: "Sennheiser", model: "Range B2", LowerFreq: 654.000, UpperFreq: 678.000)

Если я проверяю результат выше, столбец производителя содержит «Диапазон B2», как и столбец модели. Последние два столбца показывают правильные значения. Я не вижу «Sennheiser» в моей записи. Я предполагаю, что моя проблема связана с тем фактом, что для базы данных первый столбец является технически столбцом id, для которого установлено автоинкремент целого числа, поэтому мне не нужно указывать это в своем утверждении. Любые предложения о том, что я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...