关于sqlite使用其实并没有什么难点,感觉主要是有时候可能长时间不用会对其创建以及增删改查的一些语法容易忘记,而每当要使用的时候都需要去查资料,而且还不能保证立马就查到自己想要的,所以就决定写这篇文章,记录一下sqlite的创建以及增删改查的一些基本语句,以便日后需要的时候可以第一时间找到自己想要的资料,而且自己记录一遍更能加深印象,所以有时间的话建议大家都可以写写博客,坚持下来,还是会有很大收获的。
1. 什么情况下使用sqlite数据库存储 ?
关于sqlite存储数据,我之前一直比较疑惑,也没有去深究过,到底使用sqlite存储数据有什么优势。现在个人觉得使用sqlite存储的好处主要是可以实现查询功能,比如我们做一个便签app,把写的内容存储在sqlite中,就可以实现模糊查询查找自己想要的内容。还有对于数据较多的也可以使用sqlite存储,对于一些方便以表形式存储的数据用sqlite存储也很方便,目前而言自己发现的优点主要有这几点。如果有不正确或者还有其他的优点欢迎各位大佬指出。
2. 如何创建一个sqlite数据库 ?
创建sqlite数据库有三种方式:
继承sqliteopenhelper context.openorcreatedatabase() sqlitedatabase.openorcreatedatabase()
接下来看一下这三种方式的实现代码:
2.1 继承sqliteopenhelper(优点:可以在升级数据库版本的时候在回调函数里面做相应的操作)
public class mysqliteopenhelper extends sqliteopenhelper { public mysqliteopenhelper(context context, string name, sqlitedatabase.cursorfactory factory, int version) { super(context, name, factory, version); } //自定义构造器 public mysqliteopenhelper(context context,string name){ this(context,name,null,1); } /** * const.tabname(表名) content(字段名) id(主键) * @param db */ @override public void oncreate(sqlitedatabase db) { //在创建数据库时,创建一个数据表table string sql = "create table if not exists "+const.tabname+"(id integer primary key autoincrement,content text,time text )"; db.execsql(sql); } /** * 数据库升级更新时调用 * @param db * @param oldversion * @param newversion */ @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { }
创建好了数据库帮助类之后我们需要用它来帮我们创建数据库,通过下面代码我们就创建好了数据库
//创建数据库 mmysqliteopenhelper = new mysqliteopenhelper(getapplicationcontext(), "note.db"); msqlitedatabase = mmysqliteopenhelper.getwritabledatabase();
2.2 context.openorcreatedatabase()(优点:可以指定数据库文件的操作模式)
代码如下:
/**指定数据库的名称为note.db,并指定数据文件的操作模式为mode_private**/ sqlitedatabase sqlitedatabase = this.openorcreatedatabase("note.db", mode_private, null);
seopenorcreatedatabase优点可以指定数据库文件的路径”> 2.3 sqlitedatabase.openorcreatedatabase()(优点:可以指定数据库文件的路径)
注意:这种方式就可以把我们的数据库保存的外部文件里(如sd卡上),曾经面试就被问到过。接下来看下代码:
file databasefile = new file(environment.getexternalstoragedirectory() + "/sqlite", "note.db"); if (!databasefile.getparentfile().exists()) { databasefile.mkdirs(); } sqlitedatabase sqlitedatabase = sqlitedatabase.openorcreatedatabase(databasefile, null);
3. sqlite的增删改查语句 ?
3.1 增
string sql = "insert into " +const.tabname+ "(content,time) " + " values('新建笔记','2018/04/10')";
3.2 删
string sql = "delete from "+const.tabname+" where id=1";
3.3 改
//修改单个字段 string sql = "update " +const.tabname+" set content='hello java ' where id = 1"; //修改多个字段 string sql = "update " +const.tabname+" set content='hello java ',time='2020/05/10' where id = 1";
3.4 查
string sql= "select * from " + const.tabname; cursor cursor = msqlitedatabase.rawquery(sql, null); cursor.movetofirst(); while (cursor.movetonext()) { string content = cursor.getstring(cursor.getcolumnindex("content")); string time = cursor.getstring(cursor.getcolumnindex("time")); int id = cursor.getint(cursor.getcolumnindex("id")); log.e(tag, "数据库内容:" + id+content+time); } cursor.close();
4. 使用android提供的api进行增删改查
4.1 增
/** * long insert(string table, string nullcolumnhack, contentvalues values) * 第一个参数:数据库表名 * 第二个参数:当values参数为空或者里面没有内容的时候, * insert是会失败的(底层数据库不允许插入一个空行), * 为了防止这种情况,要在这里指定一个列名, * 到时候如果发现将要插入的行为空行时, * 就会将你指定的这个列名的值设为null,然后再向数据库中插入。 * 第三个参数:要插入的值 * 返回值:成功操作的行号,错误返回-1 */ contentvalues contentvalues = new contentvalues(); contentvalues.put("content","hello my name is xiaochao"); contentvalues.put("time","2018年4月10日"); long num = msqlitedatabase.insert(const.tabname,null,contentvalues); if (num == -1) { toast.maketext(this, "插入失败", toast.length_short).show(); }
4.2 删
/** * int delete(string table, string whereclause, string[] whereargs) * 第一个参数:删除的表名 * 第二个参数:修改的条件的字段 * 第三个参数:修改的条件字段对应的值 * 返回值:影响的行数 * 下面两行代码实现的功能是一样的 */ // int num = msqlitedatabase.delete(const.tabname,"id=1",null); int num = msqlitedatabase.delete(const.tabname,"id=",new string[]{"1"});
4.3 改
contentvalues contentvalues = new contentvalues(); contentvalues.put("content","hello ,this is update data"); contentvalues.put("time","2017/10/8"); // int num = msqlitedatabase.update(const.tabname,contentvalues,"id=7",null); int num = msqlitedatabase.update(const.tabname,contentvalues,"id=",new string[]{"7"});
4.4 查
cursor cursor = msqlitedatabase.query(const.tabname,null,null,null,null,null,null); if(cursor==null){ return; } cursor.movetofirst(); while (cursor.movetonext()){ string content = cursor.getstring(cursor.getcolumnindex("content")); string time = cursor.getstring(cursor.getcolumnindex("time")); int id = cursor.getint(cursor.getcolumnindex("id")); log.e(tag, "数据库内容=" + id+content+time); }
5. 总结
接下来还是总结一下整个流程:
1.创建数据库,有三种方式,平时一般用第一种,第一种可以直接在创建的时候创建表
继承sqliteopenhelper context.openorcreatedatabase() sqlitedatabase.openorcreatedatabase()
2.如果创建数据库的时候没有创建表,先创建一张表,然后对表进行增删改查操作。
3.增删改查操作可以通过sql语句执行,也可以使用android提供的api去执行。
4.sql语句执行增删改查:
增:string sql = “insert into ” +表名+ “(字段1,字段2) ” +
” values(‘字段1的值’,’字段2的值’)”;
删:string sql = “delete from “+表名+” where 条件(如:id=1)”;
改:string sql = “update ” +表名+” set 字段1=’字段1值 ‘ where 条件(如:id = 1)”;
//修改多个字段 string sql = "update " +表名+" set 字段1='字段1值',字段2='字段2值' where 条件";
查
string sql= "select * from " + 表名; cursor cursor = msqlitedatabase.rawquery(sql, null); cursor.movetofirst(); while (cursor.movetonext()) { string content = cursor.getstring(cursor.getcolumnindex("字段1")); string time = cursor.getstring(cursor.getcolumnindex("字段2")); int id = cursor.getint(cursor.getcolumnindex("id")); log.e(tag, "数据库内容:" + id+content+time); } cursor.close();
5.使用android提供的api进行增删改查:
增:
contentvalues contentvalues = new contentvalues(); contentvalues.put("字段1","字段1值"); contentvalues.put("字段2","字段2值"); long num = msqlitedatabase.insert(表名,null,contentvalues); if (num == -1) { toast.maketext(this, "插入失败", toast.length_short).show(); }
删
/** * int delete(string table, string whereclause, string[] whereargs) * 第一个参数:删除的表名 * 第二个参数:修改的条件的字段 * 第三个参数:修改的条件字段对应的值 * 返回值:影响的行数 */ int num = msqlitedatabase.delete(const.tabname,"id=1",null); // int num = msqlitedatabase.delete(const.tabname,"id=",new string[]{"1"});
改:
contentvalues contentvalues = new contentvalues(); contentvalues.put("字段1","字段1值"); contentvalues.put("字段2","字段2值"); // int num = msqlitedatabase.update(const.tabname,contentvalues,"id=7",null); int num = msqlitedatabase.update(const.tabname,contentvalues,"id=",new string[]{"7"});
查:
cursor cursor = msqlitedatabase.query(const.tabname,null,null,null,null,null,null); if(cursor==null){ return; } cursor.movetofirst(); while (cursor.movetonext()){ string content = cursor.getstring(cursor.getcolumnindex("字段1")); string time = cursor.getstring(cursor.getcolumnindex("字段2")); int id = cursor.getint(cursor.getcolumnindex("id")); log.e(tag, "数据库内容=" + id+content+time); }
好了,以上就是对数据库的一些基本操纵了,由于写博客时间不长,体验并不是那么好,但是这博客主要是为了方便以后忘记时可以快速查看了解,所以只是一些最基本的操作,如果觉得不够好,可以看看这个系列的文章,虽然也比较基础,但是条理还是蛮清晰的。玩转sqlite系列