Android——SQLite数据库
数据的访问与存储
Android有五种数据存储方式:文件存储、SharedPreferences、SQLite数据库、ContentProvider、网络存储。
文件存储: 通过I/O流读写文件,跟Java是一样的,一般用来存储一些较大的数据,如文本、图片、音频、视频等。
SharePreferences: Android中用来存储一些配置信息的方式,XML格式。
SQLite数据库: Android中一种轻量级的数据库,支持SQL语法。
ContentProvider: Android四大组件之一,可实现应用程序之间的数据交换,实现数据共享。
网络存储: 通过将数据存储到服务器,从而实现数据的存储。
SQLite数据库
SQLite是一种轻量级的数据库,支持SQL语法,适合存储大量数据,并对数据进行管理和维护。SQLite是目标是嵌入式的,占用资源低,没有服务进程,它通过文件保存数据,支持null(无)、integer(整型)、real(浮点型)、text(字符串)、blob(二进制)五种数据类型,在接收varchar、char等类型时会自动转化为上述五种类型之一。
要创建SQLite,首先要创建一个类继承于SQLiteOpenHelper
public class MyHelper extends SQLiteOpenHelper { public MyHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { //构造方法,四个参数分别为对应的上下文、数据库名称、游标工厂、数据库版本 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) {//数据库创建时调用 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//数据库版本号增加时调用 }}
SQLite的增、删、查、改
表的建立和删除:
//建表private void createTable(SQLiteDatabase db){//创建表SQL语句String s="create table Student(sno integer primary key,sname text)";//执行SQL语句db.execSQL(s);}//删表private void dropTablle(SQLiteDatabase db){//删除表的SQL语句String sql ="DROP TABLE Student";//执行SQLdb.execSQL(sql);}
表内数据的增、删、查、改:
//增 public void insert1(String sno, String sname){ SQLiteDatabase db = mh.getWritableDatabase();//获得可读写的SQLiteDatabase对象 ContentValues cv = new ContentValues();//创建ContentValues对象 cv.put("sno", sno); cv.put("sname", sname); //参数分别为数据表名称、缺省值(若插入值为空,则插入该值)、ContentValues对象 long id = db.insert("Student", null, cv); db.close();//关闭数据库 } private void insert2(String sno, String sname){ SQLiteDatabase db = mh.getWritableDatabase(); //插入数据SQL语句 String s="insert into Student(sno,sname) values("+sno+", "+sname+")"; //执行SQL语句 db.execSQL(s); db.close();//关闭数据库 } //删 public void delete1(int sno){ SQLiteDatabase db = mh.getWritableDatabase(); //条件 String where = "id=?"; //条件参数 String[] where2 = {String.valueOf(sno)}; db.delete("Student",where,where2); db.close();//关闭数据库 } private void delete2(int sno) { SQLiteDatabase db = mh.getWritableDatabase(); //删除SQL语句 String sql = "delete from Student where sno = "+sno; //执行SQL语句 db.execSQL(sql); } //查 private String query1(int sno) { SQLiteDatabase db = mh.getWritableDatabase(); //参数分别为数据表名称、查询的列名、查询条件、条件参数、分组方式、having条件、定义组的过滤器、排序方式 Cursor cursor = db.query("Student", null, null, null, null, null, null); String sname = null; if(cursor.moveToFirst()){//判断游标是否为空 cursor.move(sno); //获得sname sname = cursor.getString(1); } cursor.close(); db.close(); return sname; } private String query2(int sno) { SQLiteDatabase db = mh.getWritableDatabase(); String where = "name=?"; String[] where2 = new String[]{String.valueOf(sno)}; Cursor cursor = db.rawQuery("select * from person where "+where, where2); String sname = cursor.getString(1); cursor.close(); db.close(); return sname; } //改 private void update1(int sno, String sname) { SQLiteDatabase db = mh.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("sname", sname); String[] s = new String[]{String.valueOf(sno)}; //参数分别为数据表名称、ContentValues对象、修改条件、条件参数 db.update("Student", cv, "sno=?", s); db.close(); } private void update2(int sno, String sname) { SQLiteDatabase db = mh.getWritableDatabase(); String[] s = new String[]{sname, String.valueOf(sno)}; db.execSQL("update Student set sname = ? where sno = ?", s); db.close(); }
游标的使用:
isFirst()
判断是不是第一条记录
isLast()
判断是不是最后一条记录
move(int offset)
移动到指定记录
moveToFirst()
移动到第一条记录
moveToLast()
移动到最后一条记录
moveToNext()
移动到下一条记录
moveToPosition(int positive)
移动到一个绝对位置
moveToPrevious()
移动到上一条记录
getCount()
返回行数
getColumnCount()
返回列的总数
getColumnIndex(String columnName)
返回指定列名,不存在的话返回-1
getColumnName(int columnIndex)
返回指定索引的列名
getColumnNames()
返回一个字符串数组的列名
close()
关闭游标
SQLite的事务
SQLite的事务是对数据库操作的一连串执行,可以由很多数据库操作组成,形成工作序列,事务的特点就是,当执行过程中发生错误导致无法继续执行,那么在事务中的一连串操作都无法生效,无论是执行过的还是未执行的。
// 获得可读写的对象 SQLiteDatabase db = mh.getWritableDatabase(); //开启事务 db.beginTransaction(); try{ db.execSQL("update Student set sname = abc where sno = ?", new String[]{String.valueOf(1)}); db.execSQL("update Student set sname = def where sno = ?", new String[]{String.valueOf(1)}); } catch (SQLException e) { }finally{ //关闭事务 db.endTransaction(); //关闭数据库 db.close(); }
更多相关文章
- Android 高效的SQLite型数据库greenDAO使用
- Android五种常用数据的存储方式
- Android ListView中带有时间数据的排序
- 【黑马Android】(02)短信发送器/布局演示/android下单位/android
- Android的数据库--sqlite(一)
- Android开发集锦之二:android中的数据库操作
- Android创建和使用数据库详细指南
- android 使用Intent传递数据之全局变量传递