Qt之操作数据库(SQLite)_km.myqite.cn-程序员宅基地

技术标签: Qt  数据库  

SQLite

简介

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite也迎来了一个版本SQLite3已经发布。

SQLite的功能

SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

  ATTACH DATABASE

  BEGIN TRANSACTION

  comment

  COMMIT TRANSACTION

  COPY

  CREATE INDEX

  CREATE TABLE

  CREATE TRIGGER

  CREATE VIEW

  DELETE

  DETACH DATABASE

  DROP INDEX

  DROP TABLE

  DROP TRIGGER

  DROP VIEW

  END TRANSACTION

  EXPLAIN

  expression

  INSERT

  ON CONFLICT clause

  PRAGMA

  REPLACE

  ROLLBACK TRANSACTION

  SELECT

  UPDATE

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点像,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么现在你可以考虑使用SQLite。目前它的最新版本是3.7.8。它的官方网站是:http://www.sqlite.org或者http://www.sqlite .com .cn,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士。

SQLite的特性

下面是访问SQLite官方网站: http://www.sqlite. org/ 时第一眼看到关于SQLite的特性.

  1. ACID事务

  2. 零配置 – 无需安装和管理配置

  3. 储存在单一磁盘文件中的一个完整的数据库

  4. 数据库文件可以在不同字节顺序的机器间自由的共享

  5. 支持数据库大小至2TB

  6. 足够小,大致3万行C代码,250K

  7. 比一些流行的数据库在大部分普通数据库操作要快

  8. 简单,轻松的API

  9. 包含TCL绑定,同时通过Wrapper支持其他语言的绑定

  10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

  11. 独立: 没有额外依赖

  12. Source完全的Open,你可以用于任何用途,包括出售它

13. 支持多种开发语言,C、PHP、Perl、Java、C#、Python

SQLite类型

SQLite的数据类型

  首先你会接触到一个让你惊讶的名词:Typelessness(无类型).对! SQLite是无类型的.这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中,无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释).对于SQLite来说对字段不指定类型是完全有效的. 如:

  Create Table ex1(a, b, c);

  诚然SQLite允许忽略数据类型,但是仍然建议在你的Create Table语句中指定数据类型.因为数据类型对于你和其他的程序员交流,或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用.SQLite支持常见的数据类型,如:

  CREATE TABLE ex2(

  a VARCHAR(10),

  b NVARCHAR(15),

  c TEXT,

  d INTEGER,

  e FLOAT,

  f BOOLEAN,

  g CLOB,

  h BLOB,

  i TIMESTAMP,

  j NUMERIC(10,5)

  k VARYING CHARACTER (24),

  l NATIONAL VARYING CHARACTER(16)

  );

前面提到在某种情况下,SQLite的字段并不是无类型的.即在字段类型为”Integer Primary Key”时.

如何连接SQLite?

用PHP操作sqlite数据库

  a、 如何连接sqlite数据库?

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {

  select * from sqlite_master;

  echo "数据库连接成功!n

  ";

  } else {

  die($sqliteerror);

  }

  b、 如何列出数据库中所有的表?

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {

  $result = sqlite_array_query($db, 'select * from sqlite_master;');

  foreach ($result as $entry) {

  echo 'talbe name='.$entry['name']."

  n";

  echo 'sql='.$entry['sql']."

  n";

  echo "

  --------------------------------------------------------------------------------

  ";

  }

  sqlite_close($db);

  } else {

  die($sqliteerror);

  }}

  c、 对sqlite数据库的查询,以及结果集的显示

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {

  $result = sqlite_array_query($db, 'select name, email from user ', SQLITE_ASSOC);

  echo "user表查询结果:

  n";

  echo " n name email

  n";

  foreach ($result as $entry) {

  echo ' '.$entry['name']." " $entry['email']."

  n";

  }

  echo ' ';

  sqlite_close($db);

  } else {

  die($sqliteerror);

  }

  d、 数据库对象记录的增加、删除、修改

  sqlite_query($db, "INSERT INTO user VALUES('user".$i."'" ",'user".$i."@ hichina. com')");

  sqlite_query($db, "delete from user where user=’user99’");

sqlite_query($db, 'UPDATE user SET email="lilz@ hichina .com" where name="user1"');

用JAVA操作SQLite

开发所需依赖

  先下载SQLite数据库的驱动包

  将下载到的包解压后得到jar包sqlitejdbc-v033-nested.jar放到%JAVA_HOME%\lib 下,并且将其添加到classpath系统环境变量中,我的classpath系统环境变量现在为:

  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\sqlitejdbc-v033-nested.jar

  在你的代码中引用这个驱动:

  Class.forName("org.sqlite.JDBC");

  Connection conn = DriverManager.getConnection("jdbc:sqlite:filename");//filename为你的SQLite数据名称

  // ... use the database ...

conn.close();

或者在编写代码的时候进行外部jar包的导入。步骤:右击工程->Build Path->Config Build Path->Libraries->Add External Jars选择你要导入的SQLite的jar包

示例代码

package wang.liang;

import java.sql.*;

 

public class TestSQLite {

       public static void main(String[] args) {

              try {

                     Class.forName("org.sqlite.JDBC");//连接SQLite的JDBC

                     //建立一个数据库名testSQLite.db的连接,如果不存在就目录下创建之

                     Connection conn =DriverManager.getConnection("jdbc:sqlite://E:/Program code/SQLite code/testSQLite.db");

                     Statement stat = conn.createStatement();

//创建一个表,两列

                     stat.executeUpdate("create table table1(name varchar(20), salary int);");

//插入数据

                     stat.executeUpdate("insert into table1 values('ZhangSan',6000);");                             stat.executeUpdate("insert into table1 values('LiSi',7800);");

                     stat.executeUpdate("insert into table1 values('WangWu',8800);");

                     stat.executeUpdate("insert into table1 values('ZhaoLiu',9000);");

                     ResultSet rs = stat.executeQuery("select * from table1;");//查询数据

                     while(rs.next()){//将查询到的数据打印出来

                            System.out.print("name = "+ rs.getString("name")+" ");//列属性一

                            System.out.println("salary = "+ rs.getString("salary"));//列属性二

                     }

                     rs.close();

                     conn.close();//结束数据库的连接

              }

              catch(Exception e ) {

                     e.printStackTrace();

              }

       }

}

总结:本文介绍了嵌入式数据库SQLite在Java中的应用,通过创建表、插入数据、查询等操作介绍了在Java中对数据库的操纵。

用C、C++操作SQLite

核心对象和接口

SQL数据库引擎的最主要任务是解析SQL语句。为了达成这个目的,开发者需要了解两个对象:

* 数据库连接对象:sqlite3

* 预处理语句对象:sqlite3_stmt

严格来讲,预处理语句对象并不是必须的,因为能够使用sqlite_exec或者sqlite3_get_table这些便于使用的封装接口,而这些接口封装并隐藏了预处理语句对象。尽管如此,对预处理对象的理解有助于我们更充分的使用SQLite。

数据库连接对象和预处理对象是由下列的一组C/C++接口调用操纵的:

* sqlite3_open()

* sqlite3_prepare()

* sqlite3_step()

* sqlite3_column()

* sqlite3_finalize()

* sqlite3_close()

这6个C/C++接口例程和上述的两个对象构成了SQLite的核心功能。开发者对于它们的理解能够更好的使用SQLite。

注意,这个接口例程列表更多是概念上的意义而不是实际的接口。许多这些接口都出现在各个版本之中。例如,上述列表中的sqlite3_open()例程实际上有三个不同的接口以略微不同的方式实现相同的功能:slqite3_open(),sqlite3_open16()和sqlite3_open_v2()。列表中的实际上并不存在sqlite3_column()这个接口。显示在列表中的“sqlite3_column()”仅仅是一个占位,表示一整套用于从表中查询出各种数据类型的列记录接口。

这里说明下核心接口的主要功能:

sqlite3_open() 该接口打开与一个SQLite数据库文件的连接并返回一个数据库连接对象。这通常是应用程序调用的第一个SQLite API接口而且也是调用其他SQLite API接口前需要调用的接口。许多SQLite接口需要一个指向数据库连接对象的指针作为它们的第一个参数,因而这些接口也可以理解成是数据库连接对象的操作接口。该接口就是创建了这样一个数据库连接对象。

sqlite3_prepare() 该接口把一个SQL语句文本转换成一个预处理语句对象并返回一个指向该对象的指针。这个接口需要一个由先前调用sqlite3_open()返回的数据库连接对象指针以及一个预处理的SQL语句文本字符串为参数。这个API并不实际解析SQL语句,仅仅是为后续的解析而对SQL语句进行的预处理。

注意:新的应用中不建议使用sqlite3_prepare(),应该使用另一个接口sqlite3_prepare_v2()。

sqlite3_step() 该接口用于解析一个由先前通过sqlite3_prepare()接口创建的预处理语句,直至返回第一列结果为止。通过再次调用sqlite3_step()可以返回下一列的结果,继续不断地调用sqlite3_step()直至整个语句完成为止。对于那些并不返回结果的语句(例如:INSERT,UPDATE,DELETE语句)一次调用sqlite3_s

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ranjiewen/article/details/52595386

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签