私は迅速なプログラミングを初めて行っています。私はデータに重いアプリケーションを構築しようとしているので、データを格納するためにSqliteを使用することにしました。データベースを作成し、テーブルを作成し、データを挿入し、 "ViewController.swift"であるメインのViewControllerにデータにアクセスすることに成功しました。次に、第2のビューコントローラとそれ自身の "RegisterViewController.swift"を追加しました。最初のビューコントローラーから通常の関数にアクセスしようとしたところ、それはうまくいきました。しかし、ここに来る....私はデータベース関数にアクセスしようとすると、それは私に次のエラーを与える....私は最初のViewコントローラでDBを閉じて、2番目のビューコントローラで再オープンするすべてのオプションを試してみた....何もうまくいくようです...私は専門家の助けが必要です。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
}
}
これをテストしていは私の第2のビューコントローラのコードです。 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.
}
エラーメッセージ:NULLデータベース接続ポインタで API呼び出しのクエリが正しく
を実行しませんでした[2b0954060f]のライン123195で
誤用
ios swiftでswlite3を開始するにはチュートリアルのリンクを教えてください。 – ArgaPK