Я получаю одинаковый вывод для каждого столбца в строке.
мой вывод должен быть как
"Джек 1 взрыв мужской"
но я получаю как
"мужской 1 мужской мужской"
каждый столбец имеет значение последнего столбца.
Весь мой код указан ниже.
помогите, пожалуйста, я новичок в sqlite.
Я не знаю, где мне следует изменить код, чтобы он был корректным, помогите.
import UIKit
import SQLite3
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var lab1: UILabel!
var db: OpaquePointer?
var heroList = [Hero]()
@IBOutlet weak var tableViewHeroes: UITableView!
@IBAction func buttonSave(_ sender: UIButton) {
let name = "jack"
let powerRanking = "1"
let power = "blast"
let gender = "Male"
var stmt: OpaquePointer?
let queryString = "INSERT INTO Heroes (name, powerrank, power, gender) VALUES (?,?,?,?)"
if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}
if sqlite3_bind_text(stmt, 1, name, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
if sqlite3_bind_int(stmt, 2, (powerRanking as NSString).intValue) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
if sqlite3_bind_text(stmt, 3, power, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
if sqlite3_bind_text(stmt, 4, gender, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
if sqlite3_step(stmt) != SQLITE_DONE {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure inserting hero: \(errmsg)")
return
}
readValues()
print("Herro saved successfully")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return heroList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell")
let hero: Hero
hero = heroList[indexPath.row]
cell.textLabel?.text = hero.id.description + (hero.name?.description)! + (hero.powerRanking.description) + (hero.power?.description)! + (hero.gender?.description)!
return cell
}
func readValues(){
heroList.removeAll()
let queryString = "SELECT * FROM Heroes ORDER BY id DESC LIMIT 1;"
var stmt:OpaquePointer?
if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}
while(sqlite3_step(stmt) == SQLITE_ROW){
let id = sqlite3_column_int(stmt, 0)
let name = String(cString: sqlite3_column_text(stmt, 1))
let powerrank = sqlite3_column_int(stmt, 2)
let power = String(cString: sqlite3_column_text(stmt, 3))
let gender = String(cString: sqlite3_column_text(stmt, 4))
heroList.append(Hero(id: Int(id), name: String(name), powerRanking: Int(powerrank), power: String(power), gender: String(gender)))
}
self.tableViewHeroes.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("HeroesDatabase.sqlite")
if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
print("error opening database")
}
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Heroes (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255), powerrank INTEGER, power VARCHAR(255), gender VARCHAR(255))", nil, nil, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
}
readValues()
}
}