Sqlite属于轻量级数据库,基本类型:NULL,Integer——整数,Real——浮点数,Text——文本,Blob——二进制数据
建表:
create table users (id integer primary key autoincrement,
name text not null,
psw text not null,
age integer,
height real)
插入数据:
insert into users (name,psw,age,height) values ("张三","123456",20,1.65)
省略字段,需要根据类型对号入座的设置值,类型和数量必须要一一对应
insert into users values (2,"令狐冲","11111",18,1.75)
更新数据:
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
删除:
按条件删除
delete from users where id>2
删除表中所有数据
delete from users
删除表:
直接删除
drop table users
判断存在则删除
drop table if exists users
Android中使用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 i, int i1) {
}
}
使用:
public class SqliteActivity extends AppCompatActivity {
...
private DbOpenHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite);
...
//实例化数据库操作工具
mHelper = new DbOpenHelper(this);
}
...
//获取数据库对象(可读的)
//SQLiteDatabase db = mHelper.getReadableDatabase();
//可写的
SQLiteDatabase db = mHelper.getWritableDatabase(
//关闭数据库
//mHelper.close();
}
插入数据:
//获取数据库对象
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", title);
values.put("content", content);
values.put("time", String.valueOf(System.currentTimeMillis()));
//表名,空内容的处理,插入的内容
long rows = mDb.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.getReadableDatabase();
String[] column = {"id", "title", "content", "time"};
//查询
//第一个参数表示表名
//第二个参数表示查询的字段,如果查询所有可以用null,但是在取值时有区别的
//第三个参数表示条件,第四个参数是表示条件值(配合第三个参数使用,填充第三个参数中的问号)
//第五第六个分别表示group by和having
//第七个表示order by
Cursor c = mDb.query("diary", column, null, null, null, null, "id desc");
List<Diary> list = new LinkedList<>();
//基于默认位置往下移动一次
while (c.moveToNext()) {
//第一种,到数据库中查找该字段,比较耗时,不建议使用
// 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();
adapter.setList(list);
使用sql语句查询
String sql = "select id,title,content,time from diary";
Cursor c = db.rawQuery(sql,null);
更新:
ContentValues values = new ContentValues();
values.put("time", String.valueOf(System.currentTimeMillis()));
values.put("title", title);
//执行更新
SQLiteDatabase db = mHelper.getWritableDatabase();
//第一个参数表示表名
//第二个参数表示更新的内容
//第三个参数表示条件,第四个参数表示条件值(配合第三个参数使用,填充第三个参数中的问号)
int row = mDb.update("diary", values, "id=?", new String[]{String.valueOf(diary2Update.getId())});
if (row > 0) {
Toast.makeText(this, "更新成功", Toast.LENGTH_SHORT).show();
diary2Update = null;
} else {
Toast.makeText(this, "更新失败", Toast.LENGTH_SHORT).show();
}
删除:
SQLiteDatabase db = mHelper.getWritableDatabase();
int r = db.delete("diary", "id=?", new String[]{String.valueOf(d.getId())});