Я новичок в 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, для которого установлено автоинкремент целого числа, поэтому мне не нужно указывать это в своем утверждении. Любые предложения о том, что я пропустил?