Qt操作SQLite数据库——创建、打开、关闭、增加、删除和修改操作

 QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。QSqlDatabase对象象征了数据库的关联。Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版(Desktop Edition)包括如下一些驱动程序:

 驱动程序  数据库 
 QDB2  IBM DB2 7.1版以及更新的版本 
 QIBASE  Borland InterBase
 QMYSQL  MySql 
 QOCI  甲骨文公司(Oracle Call Interface)
 QODBC   ODBC(包括微软公司的QSL服务)
 QPSQL   PostgreSQL的7.3版以及更高版本 
 QSQLITE  QSLite第3版 
 QSQLITE2  QSLite第2版
 QTDS   Qybase自适应服务器 

    

         由于授权的许可限制,Qt的开源版本无法提供所有的驱动程序,当配置Qt时,即可以选择Qt本身包含的SQL驱动程序,也可以以查件的形式建立驱动程序,公共领域中不断发展的SQLite数据库将向Qt提供支持。

        下面讨论关于Qt进行SQLite的基本操作。

 

        代码如下:

 
  1. //添加数据库驱动、设置数据库名称、数据库登录用户名、密码

  2. QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");

  3. database.setDatabaseName("database.db");

  4. database.setUserName("root");

  5. database.setPassword("123456");

          SQLite数据库的打开、增、删、改和查询:

 

  1. if(!database.open())

  2. {

  3. qDebug()<<database.lastError();

  4. qFatal("failed to connect.") ;

  5. }

  6. else

  7. {

  8. //QSqlQuery类提供执行和操作的SQL语句的方法。

  9. //可以用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE、DELETE,

  10. //以及DDL(数据定义语言)语句,例如CREATE TABLE。

  11. //也可以用来执行那些不是标准的SQL的数据库特定的命令。

  12. QSqlQuery sql_query;

  13.  
  14. QString create_sql = "create table student (id int primary key, name varchar(30), age int)";

  15. QString select_max_sql = "select max(id) from student";

  16. QString insert_sql = "insert into student values (?, ?, ?)";

  17. QString update_sql = "update student set name = :name where id = :id";

  18. QString select_sql = "select id, name from student";

  19. QString select_all_sql = "select * from student";

  20. QString delete_sql = "delete from student where id = ?";

  21. QString clear_sql = "delete from student";

  22.  
  23. sql_query.prepare(create_sql);

  24. if(!sql_query.exec())

  25. {

  26. qDebug()<<sql_query.lastError();

  27. }

  28. else

  29. {

  30. qDebug()<<"table created!";

  31. }

  32.  
  33. //查询最大id

  34. int max_id = 0;

  35. sql_query.prepare(select_max_sql);

  36. if(!sql_query.exec())

  37. {

  38. qDebug()<<sql_query.lastError();

  39. }

  40. else

  41. {

  42. while(sql_query.next())

  43. {

  44. max_id = sql_query.value(0).toInt();

  45. qDebug()<<QString("max id:%1").arg(max_id);

  46. }

  47. }

  48. //插入数据

  49. sql_query.prepare(insert_sql);

  50. sql_query.addBindValue(max_id+1);

  51. sql_query.addBindValue("name");

  52. sql_query.addBindValue(25);

  53. if(!sql_query.exec())

  54. {

  55. qDebug()<<sql_query.lastError();

  56. }

  57. else

  58. {

  59. qDebug()<<"inserted!";

  60. }

  61.  
  62. //更新数据

  63. sql_query.prepare(update_sql);

  64. sql_query.bindValue(":name", "Qt");

  65. sql_query.bindValue(":id", 1);

  66. if(!sql_query.exec())

  67. {

  68. qDebug()<<sql_query.lastError();

  69. }

  70. else

  71. {

  72. qDebug()<<"updated!";

  73. }

  74.  
  75. //查询部分数据

  76. if(!sql_query.exec(select_sql))

  77. {

  78. qDebug()<<sql_query.lastError();

  79. }

  80. else

  81. {

  82. while(sql_query.next())

  83. {

  84. int id = sql_query.value("id").toInt();

  85. QString name = sql_query.value("name").toString();

  86.  
  87. qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);

  88. }

  89. }

  90.  
  91. //查询所有数据

  92. sql_query.prepare(select_all_sql);

  93. if(!sql_query.exec())

  94. {

  95. qDebug()<<sql_query.lastError();

  96. }

  97. else

  98. {

  99. while(sql_query.next())

  100. {

  101. int id = sql_query.value(0).toInt();

  102. QString name = sql_query.value(1).toString();

  103. int age = sql_query.value(2).toInt();

  104.  
  105. qDebug()<<QString("id:%1 name:%2 age:%3").arg(id).arg(name).arg(age);

  106. }

  107. }

  108.  
  109. //删除数据

  110. sql_query.prepare(delete_sql);

  111. sql_query.addBindValue(max_id);

  112. if(!sql_query.exec())

  113. {

  114. qDebug()<<sql_query.lastError();

  115. }

  116. else

  117. {

  118. qDebug()<<"deleted!";

  119. }

  120.  
  121. //清空表

  122. sql_query.prepare(clear_sql);

  123. if(!sql_query.exec())

  124. {

  125. qDebug()<<sql_query.lastError();

  126. }

  127. else

  128. {

  129. qDebug()<<"cleared";

  130. }

  131. }

  132.  
  133. //关闭数据库

  134. database.close();

  135.  
  136. //删除数据库

  137. QFile::remove("database.db");

        可以通过一些工具对SQLite进行管理,如下:

 

                     

 

        SQLite的管理

        管理工具挺多的,这里简单介绍几款:

  • SQLite Manager:开放源代码的SQLite管理工具,用来管理本地电脑上的SQLite数据库,可以独立运行(以XULRunner方式),也可以作为Firefox、Thunderbird、Seamonkey、Songbird、Komodo、Gecko等的插件。
  • SQLite Administrator:一个用来管理SQLite数据库文件的图形化工具,可进行创建、设计和管理操作。提供代码编辑器具有自动完成和语法着色,支持中文,适合初学者。
  • SQLite Database browser:一个SQLite数据库的轻量级GUI客户端,基于Qt库开发,界面清洁,操作简单,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。