简介
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。 [摘自百度百科]
工作原理
不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
翻译成程序狗的话就是:你只需要一个驱动包,就可以来创建一个sqlite数据库,并对其进行操作了;不像mysql,oracle之类,还需要去下载个服务端软件,安装等等。
安装
我的操作系统是centos6.5,我不记得有安装过sqlite3,但是我机器上确实有。如果你的机器上没有,那么安装本身也很简单,网上一对教程,自己可以查找,这里仅贴一个我没有试过的教程,你可以试试,相信安装步骤差别大同小异:
- 1.wget http://www.sqlite.org/sqlite-3.6.16.tar.gz 下载sqlite 安装文件
- 2.cd /usr/server 执行命令,到我需要安装的目录
- 3.tar -zxvf sqlite-3.6.16.tar.gz 解压缩文件
- 4.cd sqlite-3.6.16
- 5../configure –prefix=/usr/server/sqlite-3.6.16/ –build=i686-pc-linux-gnu
- 如果提示有错误,可能是gcc未安装,执行yum -y install gcc,执行完了后在执行步骤5. 如果没问题就可以编译了
- 6.make
- 7.make install
-
8.sqlite3 user.db 出现如下信息表示安装成功。
SQLite version 3.7.2 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
- 9.输入.help可以看到命令列表。 至此,安装完毕。
初步使用
在命令行中输入sqlite3,即可进入sqlite3的命令行控制台。针对sqlite的操作,我们仅从最基本的,数据库,操作,表操作做简单说明。
创建数据库
直接在控制台中输入:sqlite3 dbname即可创建一个sqlite3数据库,例如:
sqlite3 hello.db
或者
sqlite3 hello
这样就创建了一个名字为hello或者hello.db的sqlite数据库,随意命名即可,不过一般习惯还是命名为**.db为好,这样一眼就可以看出来这是个数据库文件。
进入数据库
其实上名的命令也是进入数据库的命令,如果当前路径下没有命名的数据库,则 sqlite3 dbname会首先创建一个数据库,然后进入。如果该名字的数据库已经存在,则直接进入。
查看数据库相关信息
-
进入数据库后,关键命令都是以.开头,比如查看当前数据库使用.databases即可:
sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/hello.db sqlite>
- 查看当前库中所有表 使用 .tables
- 查看当前库中所有表的表结构使用 .schema ;也可以使用 .schema 表名称 查看某一个表的表结构
-
如果要把查询输出到文件
>.output 文件名 > 查询语句;
创建表
-下面一个建表语句示例:
create table user(
id integer primary key autoincrement not null,
name varchar(32) ,
email varchar(100),
salt varchar(64),
crypted_password varchar(64),
created_at datetime default (datetime('now', 'localtime'))
);
注意事项:在mysql下用习惯了auto_increment来设置主键自增,但是sqlite3,必须用autoincrement 而不是auto_increment
-
插入一条记录:
insert into user(name,email,salt,crypted_password) values('admin','zhangtao54@gmail.com','27ad28b980affe8c453e4f65fadcba45624b6a01','a96cdd2daff763cbab9028f2730d83a6cd5ddb93');
插入语句与一般的插入语句并没有什么不一样
-
查看记录:
sqlite> select * from user; 1|admin|zhangtao54@gmail.com|27ad28b980affe8c453e4f65fadcba45624b6a01|a96cdd2daff763cbab9028f2730d83a6cd5ddb93|2016-01-16 20:52:16 sqlite>
java操作sqlite,
java 操作sqlite与操作其他数据库没有什么差别,唯一需要注意的是,免费版的sqlite没有密码,所以操作它的时候设置不设置密码都一样。当然也有一些办法来进行设置用户名,密码,自行网上搜索测试吧。 java操作sqlite的jdbcrl是jdbc:sqlite:数据库文件路径, 驱动为:org.sqlite.JDBC;java驱动包,自己上网上找,一坨一坨的;这里给个mvn的仓库地址:http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc
public class SqliteTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String jdbcUrl = "jdbc:sqlite:/home/hello.db";
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection(jdbcUrl);
PreparedStatement preparedStatement = connection.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
System.out.println("id="+id+" name="+name);
}
resultSet.close();
preparedStatement.close();
connection.close();
}
}