SQL语法结构
创建表
//create
create table users (id integer primary key autoincrement,
name text not null,
psw text not null,
age integer,
height real)
删除表
//直接删除
drop table users
//判断存在则删除
drop table if exists users
插入语句
//insert
insert into users (name,psw,age,height) values (" 张三 ","123456",20,1.65)
//省略字段,需要根据类型对号入座的设置值,类型和数量必须要一一对应
insert into users values (2," 令狐冲 ","11111",18,1.75)
删除语句
//条件删除
delete from users where id=2
//删除表中的所有数据
delete from users
修改语句
//update
update users set age=23,psw='111111' where id=4
//基于原来的值更新内容,如所有年龄增长一岁
update users set age=age+1
查询语句
//语句结构
select 字段 from 表 1[, 表 2] [where ...] [group by...] [order by...] [limit...]
//查询所有 ( 所有字段,所有数据 )
select * from users
//查询指定的字段
select id,name,age from users
//带条件
select * from users where age < 25
//多重条件( and 、 or 、 not )
select * from users where age >= 20 and age <= 30
//在一个区间之内(包括前后)
select * from users where age between 20 and 30
//多个分支选择 (in)
select * from users where age in (19,35,45)
//模糊查询( _ 匹配单个字符, % 匹配任意字符)
select * from users where name like " 张 _" 查找名字 2 个字, “ 张 ” 开头的
select * from users where name like " 张 %" 查找名字为 " 张 " 开头的所有用户
select * from users where name like "% 三 %" 查找名字中带 " 三 " 字的
//分组 ( 使用 group by 分组,可以用逗号连接多个字段,如果只有单个字段则将会按照该字段列出不重复数据 )
//可以在 group by 之后添加 having 做分组之后的过滤
select * from users where age>=20 group by age,id having height>1.65
//排序 (asc 表示升序默认不写就是升序, desc 表示降序 )
select * from users order by age desc,height asc
//限制数量
select * from users limit 3
//limit 结合 offset 实现任何位置条数读取
select * from users limit 3 offset 2 读取跳过 2 条之后的 3 条
//聚合函数 ( 只能放在 select 或者 group by 以及 having 之后,不能放在 where 之后 )
//统计总数 ——count( 字段 ) count(*) 统计所有数据
select count(*) from users where age=30
//查询各个年龄的数量
select count(*) as c,age from users group by age having c>0
//平均数 avg( 字段 ) —— 字段类型必须是数字形
select avg(age) from users
//最大、最小
select max(age) from users
select min(age) from users
Sqlite
SqliteDatabase :描述 sqlite 数据的类,提供了对数据表进行增删改查的方法
SqliteOpenHelper :可以打开数据文件生成对应的数据库对象
class DbOpenHelper extends SQLiteOpenHelper{
public DbOpenHelper(Context context) {
// 第二个参数表示数据库名称,第四个表示数据库版本
super(context, DB_NAME, null, VERSION);
}
// 第一次保存数据时,如果没有数据库文件,则创建数据库文件,创建完毕则调用该方法
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 创建日记表
String sql = "create table diary (id integer primary key autoincrement,
title text not null,content text not null,time text)";
sqLiteDatabase.execSQL(sql);
}
// 当数据库版本有升级时触发 ( 更新 )
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
}
}
增
// 获取数据库对象
SQLiteDatabase db = mHelper.getWritableDatabase();
// 组装添加语句
String title = etTitle.getText().toString();
String content = etContent.getText().toString();
String sql = "insert into diary (title,content,time) values
('"+title+"','"+content+"','"+System.currentTimeMillis()+"')";
db.execSQL(sql);
使用数据库对象的插入方法来插入数据
ContentValues values = new ContentValues();
values.put("title", titleStr);
values.put("content", contentStr);
values.put("time", String.valueOf(System.currentTimeMillis()));
// 表名,空内容的处理,插入的内容
long rows = db.insert("diary", null, values);
if (rows > 0) {
Toast.makeText(this, " 添加成功 ", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, " 添加失败 ", Toast.LENGTH_SHORT).show();
}
删
//
SQLiteDatabase db = mHelper.getWritableDatabase();
//使用占位符
int r = db.delete("diary", "id=?", new String[]{String.valueOf(d.getId())});
//不使用占位符
int rows = db.delete("diary","id=" + d.getId(), null);
改
//这里写代码片
values.put("time", String.valueOf(System.currentTimeMillis()));
values.put("title",title);
// 执行更新
SQLiteDatabase db= mHelper.getWritableDatabase();
// 第一个参数表示表名
// 第二个参数表示更新的内容
// 第三个参数表示条件,第四个参数表示条件值 ( 配合第三个参数使用,填充第三个参数中的问号 )
int row = db.update("diary",values,"id=?",new String[]{String.valueOf(diary2Update.getId())});
查
//数组位置要对应
String[] column = {"id","title","content","time"};
// 查询
// 第一个参数表示表名
// 第二个参数表示查询的字段,如果查询所有可以用 null ,但是在取值时有区别的
// 第三个参数表示条件,第四个参数是表示条件值 ( 配合第三个参数使用,填充第三个参数中的问号 )
// 第五第六个分别表示 group by 和 having
// 第七个表示 order by
Cursor c = db.query("diary",column,null,null,null,null,"id desc");
List<Diary> list = new LinkedList<Diary>();
// 基于默认位置往下移动一次
while(c.moveToNext()){
// 如果查询的时候字段设置为 null 则需要从表中查找下标
// int id = c.getInt(c.getColumnIndexOrThrow("id"));
// 根据查询字段位置获取内容
int id = c.getInt(0);
String title = c.getString(1);
String content = c.getString(2);
String time = c.getString(3);
Diary d = new Diary(id,title,content,time);
list.add(d);
}
// 关闭查询结果
c.close();