一、S
qlite 免费 能跨平台 android ios 等设备上都内置sqlite【重点】
他
是关系型数据库----表与表。。。表与表之间有能有关联关系的叫关系型数据库
二、SQLite数据库
SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,而其他大多数SQL数据库引 擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型的是TCP/IP),完成发送请求到服务器和接收查询结果的工作,SQLite不采用这 种工作方式。使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间的服务器进程。
三、Sqlite安装
1,环境变量配置
参考jdk环境变量的配置
2,sqlte常用命令
.databases 显示当前所有加载的数据库
.help 显示所有的帮助命令
.open ?FILENAME? 打开相应的数据库文件
.tables 显示数据库里面的所有表
.schema 表名 查看表的结构
3,创建数据库
sqlite3 数据库名
4,数据类型
1,NULL 空
2,INTEGER 整型 ---重点
3,REAL 浮点型---重点
4,TEXT 文本 ---重点
5,varchar(长度) 存放文本
四、SQLite 的操作表
1,创建表 创建用户表 id name
语法
create table 表名(
id integer ,
name TEXT
)
2,删除表
DROP TABLE 表名
3,修改表
a:修改表名:sqlite> ALTER TABLE 表名 RENAME TO 新的表名;
b:修改列名:sqlite> ALTER TABLE 表名 ADD COLUMN SEX char(1);
向表里面添加数据------表的操作
1,增
insert into 表名(列名1,列名2) values(值1,值2);
2,删
delete from 表名/user where 条件 id=2 把user表中id为2的数据删除
3,改
update 表名 set name='rose' where id=2 把id为2的数据的名字改成rose
4,查
select * from 表名 *代表所有列 select id,name form 表名 --只查表里面的id和name
五、Sqlite的运算符
1,SQLite 算术运算符 + - * / %
和java的语法一样
2,SQLite 比较运算符 1---true 0----false
= 检查两个操作数的值是否相等,如果相等则条件为真。
== 检查两个操作数的值是否相等,如果相等则条件为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。
>= 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。
<= 检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。
<> 检查两个操作数是否不相等,如果不相等返回真 反之为false
!= 同<>
3,逻辑运算符
AND 左右的表达式必须都为真才返回真
OR 左右的表达式只要有一个为真则返回真
BETWEEN 判断值是否在某个区间 select 1 between 0 and 10; 判断1 是否在0-10之间
IN 判断是否在列表中 select 1 in(1,2,3,4,5); 判断1 是否在 1,2,3,4,5 中
NOT IN 判断是否不在列表中 select 1 in(1,2,3,4,5); 判断1 是否不在 1,2,3,4,5 中
LIKE LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。 select 'aaba' like 'aa%';只要aaba是以aa开头,就返回真
IS NULL NULL 运算符用于把某个值与 NULL 值进行比较。
|| 连接两个字符串
六、深入增删改查
CREATE TABLE users(id integer primary key autoincrement,name text not null,sex integer not null,age integer,salary real);
高级查询
排序 select * from users order by salary desc; 按salary降序排
select * from users order by salary asc; 按salary升序排---默认情况
模糊查询 select * from users where name like '%a%'; 匹配users表里面的name包含a的所有记录
百分号 (%)匹配任意的字符
下划线 (_)匹配单个字符
过滤
select distinct name from users;过虑重复名字
函数
COUNT 统计满足条件的记录数 select count(1) from users;
MAX 找到满足条件的记录中 值最大的 select max(salary) from users;
MIN 找到满足条件的记录中 值最小的 select min(salary) from users;
AVG 找到满足条件的记录的平均值 select avg(salary) from users;
SUM 找到满足条件的记录值的和 select sum(age) from users;
UPPER 把字符串转换为大写字母。
LOWER 把字符串转换为小写字母
七、Java连接数据库
A、JDBC
JDBC是用Java语言向数据库发送SQL语句。
B、JAVA连接数据库
1,使用驱动包 sqlitejdbc-v033-nested.jar
2,把jar包放到项目里面 如果是java项目【在项目里面新建lib文件夹,把驱动包放入】
3,把jar加入开发环境里面 右键jar包 Build path ---add to Build path
开始使用程序连接
1,加载驱动
Class.forName("org.sqlite.JDBC");
2.指定URL字符串,值连接数据库的地址:主机+数据库名
String url="jdbc:sqlite:/c:/Users/Arvin/testDB.db";
3.打开数据库连接:
Connection conn = DriverManager.getConnection(url);
需要说明的是,执行完这句后就会在上面的url路径里面创建一个数据库,如果没有该数据库的话!
如果产生Exception in thread "main" java.sql.SQLException: out of memory 把路径盘的名改成小写
4.执行SQL语句→Statement
String sql="delete from users where id=9";
Statement statement=conn.createStataement();
//statement.execute(sql);---true/false
// statement.executeUpdate(sql);//针对添加,修改,删除 返回受影响的行数
statement.executeQuery(sql);//针对查询使用,返回的是ResultSet
5,实际开发中,不使用Statement而使用PreparedStatement
C、现在我们来看看具体怎么用
先是工具类DBConnection,它负责与数据库的连接操作!
public class DBConnection {
private static String driver = "org.sqlite.JDBC";
private static String url = "jdbc:sqlite:/c:/Users/MXN/shopping";
// 得到连接
public static Connection getConnection() {
Connection conn = null;
try {
// 加载驱动
Class.forName(driver);
// 创建连接
conn = DriverManager.getConnection(url);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
增添数据,新建连接,往products表里面插入一条数据,通过pst.setString(id,values);进行设置,1,2,3,4指的是values(?,?,?,?)四个值,执行pst.executeUpdate()方法后,如果得到的值不为0,说明,插入数据成功。
int
affect
=
pst
.
executeUpdate
();
其实affect返回的数据是受影响的数据条数,等于0说明没有插入成功。左后关掉连接
// 增添数据
public void addData(Product p) {
try {
Connection conn = DBConnection.getConnection();
String sql = "insert into products(proId,name,price,store) values(?,?,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, p.getProId());
pst.setString(2, p.getProName());
pst.setDouble(3, p.getProPrice());
pst.setInt(4, p.getProStore());
int affect = pst.executeUpdate();
if (affect > 0) {
System.out.println("添加成功");
}
pst.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
删除数据,新建连接,删除products表中name的值为name值得数据,如果得到的返回值不为0,说明删除成功!
//删除User数据
public void delUser(String name){
try {
Connection conn = DBConnection.getConnection();
String sql = "delete from products where name=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, name);
int affect = pst.executeUpdate();
if(affect>0){
System.out.println("删除成功");
}
pst.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
修改数据,新建连接,修改products表中的数据,该sql语句的意思是修改数据表products中proId为传进来的proId值得那条数据中的proId,name,price,store的值,通过下面的pst.setString()方法进行设置,返回的affect值不为0记为修改成功。
//修改数据
public void updateData(String proId,Product p){
try {
Connection conn = DBConnection.getConnection();
String sql = "update products set proId=?,name=?,price=?,store=? where proId=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, proId);
pst.setString(2, p.getProName());
pst.setDouble(3,p.getProPrice());
pst.setInt(4, p.getProStore());
pst.setString(5, proId);
int affect = pst.executeUpdate();
if(affect>0){
System.out.println("修改成功");
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
查询数据,查询数据跟其他的增删改数据不一样,他需要使用ResultSet返回查询到的数据,如果rs.next()为false,代表数据查询完毕,否则没有查询完毕!
//单个查询(按条件查询,返回boolean)
public boolean querys(String proId){
try {
Connection conn = DBConnection.getConnection();
String sql = "select * from products where proId=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, proId);
ResultSet rs = pst.executeQuery();
if(rs.next()){
rs.close();
pst.close();
conn.close();
return true;
}else{
System.out.println("查询失败");
rs.close();
pst.close();
conn.close();
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}