如何在tableview中显示sqlite3中 的表中的信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在tableview中显示sqlite3中 的表中的信息相关的知识,希望对你有一定的参考价值。

参考技术A   最近工作中用到了QT、sqlite3,这里记录当中用到的一些知识点:具体就是在QT的widget中用tableview显示sqlite数据库表中的内容。
  假设有数据库文件test.db,有表table(id integer, name nvarchar(20),age integer),且有数条数据……(随意建的表)
  首先用QTcreator创建一个基于Widget类的窗口,再拖一个tableview到widget中,保存,然后按照如下方法进行:
  1.在widget.h中增添头文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/QsqlQuery、QtSql/QsqlQueryModel
  2.在.pro工程文件中添加:QT+=sql
  3.在widget.cpp中widget的构造函数中添加如下代码:
  QsqDatabase db = QsqlDatabase::addDatabase("SQLITE");
  db.setDatabaseName("test.db");
  if(!db.open())
  
  //错误处理
  
  static QSqlQueryModel *model = new QSqlQueryModel(ui->tableview);
  model->setQuery(QString("select * from table;"));
  model->setHeaderData(0,Qt::Horizontal,QObject::tr("编号"));
  model->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"));
  model->setHeaderData(2,Qt::Horizontal,QObject::tr("年龄"));
  ui->tableview->setModel(model);
  db->close();
  这样之后,table表里的内容就会显示到tableview中了。本回答被提问者和网友采纳

如何在数组中显示来自 Firebase 的用户昵称,然后在 TableView 中显示(For 循环问题)

【中文标题】如何在数组中显示来自 Firebase 的用户昵称,然后在 TableView 中显示(For 循环问题)【英文标题】:How can I display users nickname from Firebase in an array then in a TableView (For loop issue) 【发布时间】:2017-10-17 11:03:08 【问题描述】:

我正在开发一个应用程序,当我试图通过在搜索栏中搜索期间从 Firebase 数据库中检索他们的昵称来查找用户时。一开始我想把我的所有用户都放在一个数组中,但我不能。

使用有效的代码进行编辑:

var userTab = [String]()

override func viewDidLoad() 
    super.viewDidLoad()
    ref = Database.database().reference()
    ref.child("users").queryOrdered(byChild: "pseudo").observeSingleEvent(of: .value, with:  (snapshot) in
        if (snapshot.value is NSNull) 
            print("Aucune donnée trouvée dans la base de données")
         else 
            for child in snapshot.children 
                let userSnap = child as! DataSnapshot
                let uid = userSnap.key
                let userDict = userSnap.value as! [String: AnyObject]
                let pseudo = userDict["nickname"] as! String
                let total = snapshot.childrenCount
                print(pseudo)
                self.userTab.append(pseudo) // I change this line self.userTab = [pseudo]
                self.resultsController.tableView.reloadData() // I add this line
                print(self.userTab)

                continue // I add this line too
            
        
    )
        print("userTab: \(self.userTab)") // Now the array isn't empty

在 For 循环中,我可以访问变量“伪”并在控制台中打印所有用户昵称,但 在 For 循环之外我不能将伪变量放入数组 userTab 中。我怎样才能做到这一点?我真的需要用用户的昵称填充我的 userTab 并在 TableView 中显示所有内容。 我已经尝试在 viewDidLoad() 方法之外声明“伪”变量,但同样的问题,在 For 循环之后数组始终为空。我做错了什么?

查看我的编辑,现在所有用户昵称都在 userTab 数组中,我可以在搜索栏中搜索它们并将结果显示在 tableView 中。

【问题讨论】:

在获取数据之前,创建带有标题的表。之后,将项目添加到数组并同时在表中创建行。这可以解决您的问题。 我没有在帖子中输入代码,但我已经这样做了。你要我把我的完整代码吗? 【参考方案1】:

observeSingleEvent 是异步的,它不是在循环之外,而是在不同的时间, 尝试设置断点以查看它首先停止的位置

你设置了 self.userTab = [pseudo] 所以现在只需重新加载 tableview

【讨论】:

先停是什么意思? 你试过设置断点吗?在self.userTab = [pseudo] 和您要打印的地方? 如果你有 2 个断点,你知道其中一个会先停止程序 我明白你的意思,我还没有尝试断点,但我的代码并没有停止,它只是在循环外的数组中不打印任何内容。我没有把我的 tableView 代码放在问题中,但我可以把我的完整代码放在这里 所以设置这个断点,你的打印是在数组中设置结果之后完成的

以上是关于如何在tableview中显示sqlite3中 的表中的信息的主要内容,如果未能解决你的问题,请参考以下文章

如何在iphone的地图中显示从当前位置到目的地位置的方向

如何显示 Java SQLite3 数据库中存在的表名? [复制]

iOS XMPP如何在tableview的单个部分中显示所有用户

Swift:如何在 TableView 内的 CollectionView 中显示解析的 JSON 数据?

如何在tableview中显示json模式

如何将图像存储在 sqlite3 数据库中