신속한 프로그래밍을 처음 사용합니다. 데이터에 무거운 앱을 만들려고하고 있으므로 Sqlite를 사용하여 데이터를 저장하기로 결정했습니다. 나는 데이터베이스를 생성하고, 테이블을 만들고, 데이터를 삽입하고, "ViewController.swift"인 기본 ViewController에서 데이터에 액세스하는 데 성공했습니다. 그런 다음 두 번째보기 컨트롤러와 자체 "RegisterViewController.swift"를 추가했습니다. 초반에 내 첫 번째보기 컨트롤러에서 일반 기능에 액세스하려고하면 정상적으로 작동합니다. 하지만 .... 데이터베이스 기능에 액세스하려고하면 다음과 같은 오류가 발생합니다 .... 나는 첫 번째 View Controller에서 DB를 닫고 두 번째 View Controller에서 다시 여는 모든 옵션을 시도했습니다 .... 일하는 것처럼 보입니다. 전문가의 도움이 필요합니다.Swift 4 다른보기 컨트롤러에서 데이터베이스 기능에 액세스 할 때 SQLite 문제가 발생합니다.
내가 xCode9.1과 스위프트 4
에이 테스트입니다 것은import UIKit
import SQLite3
class ViewController: UIViewController {
var db: OpaquePointer?
var gstudentcount: Int = 0
var queryCount: Int = 0
var id: Int = 0
var name: String = ""
var grade: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
openDatabase()
createStudentsTable()
getRecordsCount()
let gstudentcount = getRecordsCount()
if gstudentcount == 0 {
performSegue(withIdentifier: "registerVC", sender: self)
}
func openDatabase()
{
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("database.sqlite")
if sqlite3_open(fileURL.path, &db) == SQLITE_OK {
print("Database Created !!")
}
}
func createStudentsTable()
{
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Students (id INTEGER PRIMARY KEY AUTOINCREMENT, StudentName TEXT, Grade INTEGER)", nil, nil, nil) != SQLITE_OK
{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
} else
{
print("Database Table created")
}
}
func getRecordsCount() -> Int32
{
//this is our select query
let countQuery = "SELECT count(*) FROM Students"
//statement pointer
var qstmt:OpaquePointer?
if sqlite3_prepare(db, countQuery, -1, &qstmt, nil) == SQLITE_OK
{
if (sqlite3_step(qstmt) == SQLITE_ROW)
{
let id = sqlite3_column_int(qstmt, 0)
print ("printing students count from main view controller \(id)")
return id
} else
{
return 99
}
} else
{
print ("Query did not execute properly")
return 99
}
}
여기 내 두 번째 뷰 컨트롤러 코드입니다. RegisterViewController에서
import UIKit
import SQLite3
class RegisterViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let rstudentsCount = ViewController().getRecordsCount()
print("this is from RegisterViewController: \(rstudentsCount)")
// Do any additional setup after loading the view.
}
오류 메시지 : 라인 123195에서
오용 NULL 데이터베이스 연결 포인터 API 호출은 [2b0954060f]
쿼리가 제대로
을 실행하지 못했습니다
ios swift에서 swlite3를 시작하려면 자습서 링크를 제공해 주시겠습니까? – ArgaPK