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";
		//执行SQL
		db.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,android)