SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口 。
SQLite第一个Alpha版本诞生于2000年5月。至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布 。
下载地址 :https://www.sqlite.org/download.html
具体下载window版本的即可
解压文件后,我们进行点击操作
Shift + 右键点击 sqlite3.exe 所在⽬录, 打开 powershell
语法:
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 列名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 by
eg:
select age,cout(*) from stu group by age;//查询每个年龄的人数
范围查询:
between ... and ...
eg:
select *from stu where age between 10 and 20;
去重:
distinct
eg:
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;
事先创建一个表
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
<dependency>
<groupId>org.xerialgroupId>
<artifactId>sqlite-jdbcartifactId>
<version>3.42.0.0version>
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.创建数据源 Datasource
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 ="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();
}
}