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");  
//添加数据库驱动、设置数据库名称、数据库登录用户名、密码
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE"); 
database.setDatabaseName("database.db");
database.setUserName("root");  
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");  
if(!database.open())
{  
qDebug()<<database.lastError();
qFatal("failed to connect.") ;
}
else
{
//QSqlQuery类提供执行和操作的SQL语句的方法。
//可以用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE、DELETE, 
//以及DDL(数据定义语言)语句,例如CREATE TABLE。
//也可以用来执行那些不是标准的SQL的数据库特定的命令。
QSqlQuery sql_query; 

QString create_sql = "create table student (id int primary key, name varchar(30), age int)";
QString select_max_sql = "select max(id) from student";
QString insert_sql = "insert into student values (?, ?, ?)";
QString update_sql = "update student set name = :name where id = :id";
QString select_sql = "select id, name from student";
QString select_all_sql = "select * from student";
QString delete_sql = "delete from student where id = ?";
QString clear_sql = "delete from student";

sql_query.prepare(create_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"table created!";
}

//查询最大id
int max_id = 0;
sql_query.prepare(select_max_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
max_id = sql_query.value(0).toInt();
qDebug()<<QString("max id:%1").arg(max_id);
}
}
//插入数据
sql_query.prepare(insert_sql);
sql_query.addBindValue(max_id+1);
sql_query.addBindValue("name");
sql_query.addBindValue(25);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"inserted!";
}

//更新数据
sql_query.prepare(update_sql);
sql_query.bindValue(":name", "Qt");
sql_query.bindValue(":id", 1);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"updated!";
}

//查询部分数据
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value("id").toInt();
QString name = sql_query.value("name").toString();

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

//查询所有数据
sql_query.prepare(select_all_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
int age = sql_query.value(2).toInt();

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

//删除数据
sql_query.prepare(delete_sql);
sql_query.addBindValue(max_id);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"deleted!";
}

//清空表
sql_query.prepare(clear_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"cleared";
}
}

//关闭数据库
database.close();

//删除数据库
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数据库的工具,使用向导方式实现。

        更多关于SQLite的介绍与使用,请参考:
http://blog.csdn.net/qinpanke/article/details/51038739
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值