一.简单介绍
SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口 。
SQLite第一个Alpha版本诞生于2000年5月。至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布 。
二.具体安装细节
2.1 下载
下载地址 :https://www.sqlite.org/download.html
具体下载window版本的即可
2.2 解压
解压文件后,我们进行点击操作
Shift + 右键点击 sqlite3.exe 所在⽬录, 打开 powershell
2.3 sqlite的使用
对数据库的操作
- 创建数据库:sqlite3 database_name.db
- 删除数据库:DROP DATABASE database_name.db
对表的操作
- 创建表
语法:CREATE TABLE 表名(列名1 数据类型 “约束”(有可无)列名2 数据类型 “约束”(有可无)列名3 数据类型 “约束”(有可无)...);//注意,SQL语句要以分号结尾
数据类型:
- 删除表
语法:DROP TABLE 表名;
- 修改表结构
重命名:ALTER TABLE 旧表名 rename to 新表名;
增加一列:ALTER TABLE 表名 add column 列名 数据类型
- 向表插入数据
语法:INSERT INTO 表名 VALUES(值1,值2,值3...);//给所有的列插入数据,有多少列就要填多少值。INSERT INTO 表名 VALUE(列名1,列名2,....) VALUE (值1,值2,... );//给指定列插入数据
- 修改表内的数据
UPDATE 表名 set 列名 = 新值,...;
UPDATE 表名 set 列名 = 新值,...WHERE 条件;//条件用来定位要修改的某些行
条件:列名 运算符 值运算符: = != > >= <=如果有多个条件,可以用and和or连接
eg:update stu set age = 21;update stu set age = 30 where num = 1001;update stu set age = 30 where num > 60 and num < 999;
- 删除表中的所有数据
DELETE FROM 表名;//删除表中所有的数据
DELETE FROM 表名 WHERE 条件;//删除满足条件数据eg:delete from stu;delete from stu where num = 1003;
- select 数据查询
语法:SELECT 列名1,...FROM 表名;SELECT *FROM 表名;//查询整个表的数据SELECT *FROM 表名 where 条件;//查询整个表的数据eg:insert into stu1(stu_num,stu_name,age,,addr) select stu_num,stu_name,age,addr from stu;//从stu表中插入数据,然后插入到stu1表中
- 高级查询
模糊查询列名 like 通配符 (_%)_: 匹配单个字符&:匹配任意单个字符eg:select *from stu where name like 'wang_';select *from stu where name like '%wang%'
排序:按指定的列名进行排序order by 列名 asc/desc;//asc:升序 desc:降序eg:select *from stu order by age desc;//根据年龄降序排序限制记录条数limit 数字eg:select *from stu limit 2;//查看表中的前两条记录排序+限制eg:select *from stu order by age desc limit 1;//查看年龄最大的记录聚合函数cout(列*名) //统计记录数量sum(列名) //计算给定列的总和avg(列名) //计算给定列的平均值min(列名) //计算给定列的最小值max(列名) //计算给定列*的最大值eg:select cout(*) from stu;select max(age)-min(age) from stu;别名eg:select num AS 学号,name AS 姓名 from stu;分组:group byeg:select age,cout(*) from stu group by age;//查询每个年龄的人数范围查询:between ... and ...eg: select *from stu where age between 10 and 20;去重:distincteg:select distinct age from stu;子查询:in(值,...)in(select ...)eg:select *from stu where age in (18,20,25);select *from stu where age in (select age from stu where age < 30); ★★★★★★多表联接select 列名,... 表1,表2,...where 条件select 列名,... form 表1 join 表2 on 联接条件 ... where 过滤条件;eg:学生表: 学号 姓名 年龄 班级 学校 ...create table t_stu(num int primary key, name text,age int,class int school int);intsrt into t_stu values(1001,'wb1',18,100101,2001);insert into t_stu values(1002,'wb2',19,100101,2001);insert into t_stu values(1003.'wb3',20,100101,2002);学校表:编号 校名 电话 地址...create table t_school(num int primary key,name text, tel text,addr text);insert into t_school values(2001,'first',010-123456,'changsha');insert into t_school values(2002,'second',010-0101011,'shanghai');需求:查询学生的学号,姓名,学校名select t_stu.num,t_stu.name,t_school,name from t_stu,t_school);===》学生表中的每一行都与学校表中的每一行进行联结,结果称之为 笛卡尔积此时,需要指明两个表联结条件,在上述表中,联结条件是 学校的编号相同两种联结写法:第一种: select t_stu,num, t_stu.name,t_school.name from t_stu,t_school where t_stu.school = t_school.num;第二种:select t_stu.num,t_stu.name,t_school.name from t_stu join t_school on t_stu.school = t_school.num;select t_stu.num,t_stu.name,t_school.name from t_stu join t_school on t_stu.school = t_school.num where t_stu.num = 1002;
2.4 怎么使用jdbc连接sqlite
事先创建一个表
CREATE TABLE test(id int primary key,name varchar(20));
然后我们开始对sqlite进行基本的操作.
1.首先引入sqlite依赖
进入maven官网,导入依赖
https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.42.0.0
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.42.0.0</version>
</dependency>
2.编写数据库连接代码
public class ConnectionTest {public static void main(String[] args) throws SQLException {
// testInsert();testSelect();}private static void testSelect() throws SQLException {//1.创建数据源DataSource dataSource=new SQLiteDataSource();((SQLiteDataSource)dataSource).setUrl("jdbc:sqlite://d:/ITsoftware/sqlite-tools-win32-x86-3420000/test.db");//2.建立连接Connection connection= dataSource.getConnection();//3.构造SQL语句String sql="select * from test";//4.执行SQL语句PreparedStatement statement=connection.prepareStatement(sql);ResultSet resultSet=statement.executeQuery();//5.遍历结果集合while (resultSet.next()){int id=resultSet.getInt("id");String name=resultSet.getString("name");System.out.println("id "+id +" "+ name);}//6.释放资源statement.close();resultSet.close();connection.close();}private static void testInsert() throws SQLException {//1.创建数据源 DatasourceDataSource dataSource=new SQLiteDataSource();((SQLiteDataSource)dataSource).setUrl("jdbc:sqlite://d:/ITsoftware/sqlite-tools-win32-x86-3420000/test.db");//2.建立连接Connection connection=dataSource.getConnection();//3.构造Sql语句String sql ="insert into test values(?,?)";//4.执行Sql预期PreparedStatement statement=connection.prepareStatement(sql);statement.setInt(1,11);statement.setString(2,"李四");statement.executeUpdate();//5.释放资源statement.close();connection.close();}}