SQLite数据库djibenccao操作以及在androidc操作SQLite

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 字段 from1[,表2] [where ...] [group by...] [order by...] [limit...]

查询所有(所有字段,所有数据)
select * from users
查询指定的字段
select id,name,age from users
带条件
select * from users where age < 25
多重条件(andornotselect * 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())});

猜你喜欢

转载自blog.csdn.net/weixin_42371001/article/details/80990653