sqlite数据库操作
程序员文章站
2022-04-15 19:36:47
...
几个重要类
-
ContentValues:存储数据的容器,内部构造为HashMap,拥有key,value两值,但key只能是string类型的,value只能存储基本数据类型,不能存储对象;
-
SQLiteDatabase:
-
Cursor:数据库查询语句返回的一个对象,代表数据的游标(定位) 常用的方法有: c.move(int offset); //以当前位置为参考,移动到指定行 c.moveToFirst(); //移动到第一行 c.moveToLast(); //移动到最后一行 c.moveToPosition(int position); //移动到指定行 c.moveToPrevious(); //移动到前一行 c.moveToNext(); //移动到下一行 c.isFirst(); //是否指向第一条 c.isLast(); //是否指向最后一条 c.isBeforeFirst(); //是否指向第一条之前 c.isAfterLast(); //是否指向最后一条之后 c.isNull(int columnIndex); //指定列是否为空(列基数为0) c.isClosed(); //游标是否已关闭 c.getCount(); //总数据项数 c.getPosition(); //返回当前游标所指向的行数 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 c.getString(int columnIndex); //返回当前行指定列的值
-
SQLiteOpenHelper: 通过SQLiteOpenHelper类来实现对SQLite数据库的操作,管理数据库(创建、增、修、删) & 版本的控制 使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。 SQLiteOpenHelper类的数据库操作方法: onCreate();创建数据库时自动调用,用于创建数据库; onUpgrade();升级数据库 close();关闭所有打开的数据库对象 execSQL();可进行增删改操作, 不能进行查询操作 query();rawQuery();查询数据库 insert();插入数据 delete();删除数据 getWritableDatabase();通过返回的SQLiteDatabase对象对数据库进行操作 getReadableDatabase();通过返回的SQLiteDatabase对象对数据库进行操作
数据库操作
-
创建表格
创建子类继承SQLiteOpenHelper类,实现Oncreate()方法 调用SQLiteDatabase的execSql()方法,代入写好的sql语句,生成表格
-
插入数据
1.用容器ContentValues 存储添加数据的字段以及字段值; 2.根据继承的子类调用getWritableDatabase()方法获得SQLiteDatabase对象; 3.调用SQLiteDatabase对象的方法isnert(?,?,?)插入数据; 第一个参数:要插入数据库的表名 第二个参数:null(防止第三个参数为空造成的sql语句错误) 第三个参数:ContentValues对象 返回long值,-1代表插入失败 例子: public void insert(Note note){ cv.put(notesDB.getTIME(),note.getTIME()); cv.put(notesDB.getCONTENT(),note.getCONTENT()); cv.put(notesDB.getIMGPATH(),note.getIMGPATH()); cv.put(notesDB.getTYPE(),note.getTYPE()); cv.put(notesDB.getTXTCOLOR(),note.getTXTCOLOR()); cv.put(notesDB.getTXTSIZE(),note.getTXTSIZE()); cv.put(notesDB.getBGIMG(),note.getBGIMG()); dbWriter.insert(notesDB.getTABLENAME(),null,cv); }
-
删除数据
根据继承的子类调用getWritableDatabase()方法获得SQLiteDatabase对象,并调用delete方法,delete(?,?,?) 第一个参数:操作表名; 第二个参数:sql语句中的where部分,即删除条件,为null则无条件,条件值用?代替 第三个参数:给where语句传参,必须是String[]数组类型,即使只有一个参数;按顺序替换 第二个参数中的“?” 例子: public void delete(String id){ dbWriter.delete(notesDB.getTABLENAME(),notesDB.getID()+"=?",new String[]{id}); }
-
修改数据
1.将要修改的字段以及字段字存入ContentValues对象中; 2.根据继承的子类调用getWritableDatabase()方法获得SQLiteDatabase对象 3.SQLiteDatabase对象调用update();方法 update(?,?,?,?); 第一个参数:操作表名 第二个参数:需要修改的字段容器,即为ContentValues对象; 第三个参数:where表达式的内容,即为条件,否则全部修改,条件值用?代替 第四个参数:给where语句传参,必须是String[]数组类型,即使只有一个参数;按顺序替换 第二个参数中的“?” 例子: public void update(Note note){ cv.put(notesDB.getTIME(),note.getTIME()); cv.put(notesDB.getCONTENT(),note.getCONTENT()); cv.put(notesDB.getIMGPATH(),note.getIMGPATH()); cv.put(notesDB.getTYPE(),note.getTYPE()); cv.put(notesDB.getTXTCOLOR(),note.getTXTCOLOR()); cv.put(notesDB.getTXTSIZE(),note.getTXTSIZE()); cv.put(notesDB.getBGIMG(),note.getBGIMG()); dbWriter.update(notesDB.getTABLENAME(),cv,notesDB.getID()+"=?",new String[]{note.getID()}); }
-
查询数据
1.根据继承的子类调用getReadableDatabase()方法获得SQLiteDatabase对象(此处查找用的是Read,注意) 2.SQLiteDatabase对象直接调用query()方法 query(?,?,?,?,?,?,?,?);(共八个参数) 第一个参数:操作的表名 第二个参数:select与from之间要显示的字段名集合(故此处需要建立一个String[] cols去存储字段) 第三个参数:sql语句中的where部分的条件内容,可以为null,全部查找; 第四个参数:sql语句中的group By内内容,指定分组条件,可以为null,此时不分组查询; 第五个参数:sql语句中的having内容,分组后的过滤,配合groupby使用,可以为null 第六个参数:sql语句中的orderby内容,指定查询结果后的排序字段,可以为null,此时不查询 第七个参数:sql语句中的limit内容,指定分页参数,可以为null,此时不分页; 第八个参数: 为true或false值,选择是否过滤重复值 七与八个参数可以忽略不写 3.该方法调用后取得游标cursor,取出数据需要调用cursor的两个方法 首先根据字段获取下标index = cursor.getColumnIndex("id");(因为字段多个,是一个集合) 然后调用cursor.getString(index),根据下标取出String类型的值 因为查询结果多条,故需要使用while语句取值, 条件则为cursor.moveToNext();该方法读取下一行是否有数据,无则为false,有则为true 例子: public List<Note> selectByType(String type){ List<Note> notes = new ArrayList<>(); String[] cols = { notesDB.getID(), notesDB.getCONTENT(), notesDB.getTIME(), notesDB.getTYPE(), notesDB.getIMGPATH(), notesDB.getTXTCOLOR(), notesDB.getTXTSIZE(), notesDB.getBGIMG() }; cursor = dbReader.query( notesDB.getTABLENAME(), cols,notesDB.getTYPE()+"=?", new String[]{type}, null, null, null, null); while (cursor.moveToNext()){ Note note = new Note(); note.setID(cursor.getString(cursor.getColumnIndex(notesDB.getID()))); note.setCONTENT(cursor.getString(cursor.getColumnIndex(notesDB.getCONTENT()))); note.setTIME(cursor.getString(cursor.getColumnIndex(notesDB.getTIME()))); note.setTYPE(cursor.getString(cursor.getColumnIndex(notesDB.getTYPE()))); note.setIMGPATH(cursor.getString(cursor.getColumnIndex(notesDB.getIMGPATH()))); note.setTXTCOLOR(cursor.getString(cursor.getColumnIndex(notesDB.getTXTCOLOR()))); note.setTXTSIZE(cursor.getString(cursor.getColumnIndex(notesDB.getTXTSIZE()))); note.setBGIMG(cursor.getString(cursor.getColumnIndex(notesDB.getBGIMG()))); notes.add(note); } return notes!=null?notes:null; }
参考资料
结合资料,根据自己的理解作出的总结,有错误的话麻烦大家帮我指点,不懂的小弟也愿意帮助萌新小白,感谢大家观看!!!
-
上一篇: ps软件怎么添加文字
下一篇: ps软件怎么改日期
推荐阅读
-
网友爆料如何强制关闭小米电视开机广告:附操作方法
-
华云发布国产云操作系统安超OS 全面适配国内外芯片
-
MySQL数据库---数据库管理
-
ubuntu14.04安装opencv3.0.0的操作方法
-
浅谈javascript中new操作符的原理
-
微信小程序 详解Page中data数据操作和函数调用
-
利用Django框架中select_related和prefetch_related函数对数据库查询优化
-
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
-
Hadoop系列006-HDFS概念及命令行操作
-
Linux VPS备份教程 数据库/网站文件自动定时备份