Открытие и использование базы данных из другого контроллера представления - PullRequest
0 голосов
/ 21 июня 2020

Я создал базу данных в одном контроллере представления, и я хотел бы открыть ее и получить к ней доступ в другом контроллере представления. Мне было интересно, как открыть существующую базу данных из одного контроллера представления в другом контроллере представления. Я собираюсь открыть базу данных и иметь возможность обновлять строку, поэтому мне также понадобится доступ к «частям» (например, id, name, email). Не могли бы вы помочь мне? Все было бы полезно. Спасибо!

1 Ответ

0 голосов
/ 21 июня 2020

Вы можете получить доступ к своей БД с любого V C. Код (который вы, вероятно, будете использовать везде, где хотите получить доступ к своей БД) будет иметь вид

let path = NSSearchPathForDirectoriesInDomains(
            .documentDirectory, .userDomainMask, true
        ).first!

do {
                let db = try Connection("\(path)/<your.db.filename>")

                let recordsTable = Table("records")
                //or whatever you'd like to do, extract, modify, insert or delete

    } 
catch let error {
            print("Data operation failed for records table: \(error)")
        }

Вместо того, чтобы копировать один и тот же код по всему вашему проекту, вы можете отдельно создать свой собственный класс для любой из ваших БД. операций и получить к нему доступ из любого места:

    class DatabaseOps {
    //..
    func getHighscoreTable() -> Array<HighScoreDataArray> {
                
            let path = NSSearchPathForDirectoriesInDomains(
                .documentDirectory, .userDomainMask, true
            ).first!
            
            var highscores = [HighScoreDataArray]()
                
                do {
                    let db = try Connection("\(path)/tasksolver.db")
    
                    let score = Expression<Int>("Score")
                    let username = Expression<String>("Username")
                    let recordsTable = Table("records").order(score.desc).limit(10)
                    
                        for row in try db.prepare(recordsTable) {
                   
                            let highscore = HighScoreDataArray(score: Int(row[score]), username: String(row[username]))
                            highscores += [highscore]
                        }
                    
                    }     catch let error {
                    print("Data operation failed for records table: \(error)")
                }
    return highscores
        }

//..
}

    class RecordsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var myDb : DatabaseOps = DatabaseOps()
    //...
    super.viewDidLoad()
    //get the data from database by using myDB method
    myHighScoreTable = myDb.getHighscoreTable()

Кроме того, прежде чем вы попробуете его в разных VC - не забудьте убедиться, что у вас есть файл DB на месте. Если это не так, позвольте db = try Connection создать для вас пустую базу данных, которая не будет содержать никаких ваших данных или таблиц, к которым вы хотите получить доступ.

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