一、基本描述
在实际的工作中,需要管理较多的图片,并且每张图片有很多的状态,在其他标志变量控制复杂的情形下,想到了Sqlite数据库。在之前基础自我强化的时候,完成一个小Demo实现了Sqlite的基本使用。借用需求的基础上,强化了相关知识点,在此做一个笔记记录。
Sqlite数据库文件存放路径:/data/data/包名/databases。在真机中使用,手机没有root权限下,不能够获取文件。不能获取文件,也就比较安全,这也是Sqlite在Android中使用的原因之一。
数据库辅助工具有很多,最近在使用Navicat Premium。支持多种数据库类型,同时支持连接远程服务器控制,也支持本地文件查看。
二、Sql数据库sql语句语法
1,数据库操作
#查看所有数据库
SHOW DATABASES;
------连接服务器成功后,查看服务器中已经有的数据库
#创建数据库
CREATE DATABASE test1;
#删除数据库(如果存在)
DROP DATABASE
IF EXISTS test1;
#使用数据库
USE test1;
------ 创建数据库/删除数据库/使用数据库(前提是数据库已创建)
2,表的操作
#展示所有表格
SHOW TABLES;
#创建表格
CREATE TABLE contact (
id INT auto_increment PRIMARY KEY,
NAME VARCHAR (50),
sex VARCHAR (20),
birthday VARCHAR (50),
content VARCHAR (100)
) DEFAULT CHARSET = utf8;
#删除表格
DROP TABLE contact;
#查看表结构
DESCRIBE contact;
-----使用数据库条件下,展示所有表格;
-----创建名为contact的表格【varchar 是内容限定,但并没有实际的意义】
-----删除指定名称的表格
-----查看表格的结构
3,增删改查
向表格中插入数据:【增】
insert into 表名(字段列表) values(值列表)
INSERT INTO contact
VALUES
(
NULL,
'dd',
'女',
'1889-12-8',
'......'
);
#查询表格数据
SELECT
*
FROM
contact;
SELECT
id,
NAME,
birthday
FROM
contact;
-----查询全部信息
-----筛选id,姓名,生日等信息
更新表格数据:【改】
update 表名 set 字段名=值 where 条件子句
#修改某条数据
UPDATE contact
SET content = "天下武功,无奇不破,唯快不破!"
WHERE
id = 3;
删除表格中的数据:【删】
delete from 表名 where 条件子句
#删除数据
DELETE
FROM
contact
WHERE
id = 5;
----- 删除数据时,切记不要忘记条件限制,否则将清空所有数据。
增加限制条件的查询:
# and 且
SELECT
*
FROM
contact
WHERE
birthday > '1988-1-2'
AND birthday < '1988-12-1';
#or 或者
SELECT
*
FROM
contact
WHERE
birthday < '1988-11-2'
OR birthday > '1988-12-1';
#BETWEEN
SELECT
*
FROM
contact
WHERE
birthday BETWEEN '1988-1-2'
AND birthday < '1988-12-1';
#in
SELECT
*
FROM
contact
WHERE
id IN (2, 4, 6);
#排序 ASC 升序 desc 降序
SELECT
*
FROM
contact
ORDER BY
id DESC;
#分组查询 #聚合函数
SELECT
MAX(id),
NAME,
sex
FROM
contact
GROUP BY
sex;
#按照性别分组,显示每组id最大的元
SELECT
MIN(birthday)
FROM
contact;
#最小
SELECT
avg(id) AS '平均id'
FROM
contact;
#平均
SELECT
count(*)
FROM
contact;
SELECT
count(sex)
FROM
contact;
#数量
SELECT
SUM(id)
FROM
contact;
#求和
SELECT
*
FROM
contact
LIMIT 2,
2;
三、Sqlite的使用
SqliteDataBase使用exeSQL()方法执行insert,delete,update之类的sql语句;rawQuery()方法执行selector语句。
SqliteDataBase也提供了对应的方法专门用于添加。删除、更新、查询。
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,
它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法,
key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "明明");
values.put("age", 4);
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
delete()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("person", "personid<?", new String[]{"2"});
db.close();
上面代码用于从person表中删除personid小于2的记录。
update()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “明明”);//key为字段名,value为值
db.update("person", values, "personid=?", new String[]{"1"});
db.close();
上面代码用于把person表中personid等于1的记录的name字段的值改为“明明”。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
希望你有高跟鞋也有跑鞋,
喝茶也喝酒。
希望你有独立果敢的朋友,
也有意气风发的对手。
希望你对过往情深意重,
但下了决心就不回头。
希望你对理想抵死执着,
但当下却无急迫神色。
希望你特别美,特别敢,
特别温柔特别狠。
希望你穿起西装很帅,
烦心有人喝酒配串儿。
希望你为理想奋斗执着,
也有从头再来的气魄。
希望你会不动声色地活,
但从不将就。
希望你一身傲骨,
但也满怀慈悲。
希望你特别狠,特别准,
特别洒脱特别稳。