Android开发——数据持久存储_SQLite数据库
2017-02-14 18:25
393 查看
SQLiteOpenHelper类
构造函数
实例方法
抽象方法
SQLiteOpenHelper类按如下步骤使用
定义继承自SQLiteOpenHelper的类MySQLHelper
得到MySQLHelper的一个实例
调用getWritableDatabase返回可对数据库读写的对象
对表中数据的操作
增
删
查
改
其他
onCreate方法的使用
数据库的位置
SQLite是一款轻量级的关系型数据库。Android提供了SQLiteOpenHelper类用于管理数据库。
参数:
Context:
String:数据库名,创建数据库时使用这个名称
CursorFactory:Cursor对象,允许在查询数据的时候返回一个自定义的Cursor,一般传入null
int:当前数据库的版本号,在升级数据库的时候会用到
getWritableDatabase():同上。和getReadableDatabase()不同的是,当数据库不可写入时,getWritableDatabase()将出现异常,getReadableDatabase()返回只可以读数据库的对象。
onUpgrade(SQLiteDatabase, int, int):升级数据库的逻辑,在其中添加删除表的语句
参数:
String:表名
:一般传入null
ContentValues:要插入的记录。通过调用其put方法,并传入表中的列名以及对应的数据值。
参数:
String:表名
后两个参数用于约束删除某一行或者某几行的数据,不指定的话删除所有行
参数:
table:表名
columns:查询哪几列,不指定的话查询所有列
第三个和第四个参数用于约束查询某一行或者几行的数据,不指定的话查询所有行;
第五个参数指定需要对查询结果进行group by的列,不指定的话不对查询结果进行group by;
第六个参数对group by之后的结果进一步过滤,不指定的话表示不过滤;
第七个参数指定查询结果的排序方式。
参数:
String:表名
ContentValues:更新数据
最后两个参数用于约束修改某一行或者几行的数据,不指定的话修改所有行。第三个参数对应SQL语句的where。
还可以通过SQL语句进行增删查改。
构造函数
实例方法
抽象方法
SQLiteOpenHelper类按如下步骤使用
定义继承自SQLiteOpenHelper的类MySQLHelper
得到MySQLHelper的一个实例
调用getWritableDatabase返回可对数据库读写的对象
对表中数据的操作
增
删
查
改
其他
onCreate方法的使用
数据库的位置
SQLite是一款轻量级的关系型数据库。Android提供了SQLiteOpenHelper类用于管理数据库。
SQLiteOpenHelper类
SQLiteOpenHelper是抽象类。构造函数
SQLiteOpenHelper(Context, String, CursorFactory, int):参数:
Context:
String:数据库名,创建数据库时使用这个名称
CursorFactory:Cursor对象,允许在查询数据的时候返回一个自定义的Cursor,一般传入null
int:当前数据库的版本号,在升级数据库的时候会用到
实例方法
getReadableDatabase():可以创建或者打开或者升级已有的数据库,并返回可对数据库进行读写操作的SQLiteDatabase对象。此方法首先判断当前程序中是否有同名数据库,如果没有的话,创建数据库并调用onCreate()方法;如果有的话,判断版本号,版本号增加则升级,否则直接打开。getWritableDatabase():同上。和getReadableDatabase()不同的是,当数据库不可写入时,getWritableDatabase()将出现异常,getReadableDatabase()返回只可以读数据库的对象。
抽象方法
onCreate(SQLiteDatabase):创建数据库的逻辑,比如在此函数中添加创建表的语句db.execSQL(create_table_string),建表语句写成字符串create_table_string
onUpgrade(SQLiteDatabase, int, int):升级数据库的逻辑,在其中添加删除表的语句
db.execSQL("drop table if exists table_name"),并调用onCreate()方法
SQLiteOpenHelper类按如下步骤使用
定义继承自SQLiteOpenHelper的类MySQLHelper
public class MySQLHelper extends SQLiteOpenHelper{ public static final String CREATE_STUDENT = "create table Student (" + "id integer primary key autoincrement, " + "name text, " + "age integer)"; private Context mContext; public MySQLHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_STUDENT); Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrage(SQLiteDatabase db, int oldVersion, int newVersion){ } }
得到MySQLHelper的一个实例
MySQLHelper dbHelper = new MySQLHelper(this, "School.db", null, 1);
调用getWritableDatabase()返回可对数据库读写的对象
dbHelper.getWritableDatabase();
对表中数据的操作
SQLiteDatabase对象可以对数据库进行操作。增
db.insert(String, , ContentValues)参数:
String:表名
:一般传入null
ContentValues:要插入的记录。通过调用其put方法,并传入表中的列名以及对应的数据值。
dbHelper = new MySQLHelper(this, "School.db", null, 2); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues record = new ContentValues(); record.put("name", "V"); record.put("age", 12); db.insert("Student", null, record); record.clear(); record.put("name", "John"); record.put("age", 15); db.insert("Student", null, record);
删
db.delete(String, , ):参数:
String:表名
后两个参数用于约束删除某一行或者某几行的数据,不指定的话删除所有行
db.delete("Student", "age>?", new String [] {"12"})
查
db.query(String table, String[] columns, String selections, String[] selectionArgs, String groupBy, String having, String orderBy):参数:
table:表名
columns:查询哪几列,不指定的话查询所有列
第三个和第四个参数用于约束查询某一行或者几行的数据,不指定的话查询所有行;
第五个参数指定需要对查询结果进行group by的列,不指定的话不对查询结果进行group by;
第六个参数对group by之后的结果进一步过滤,不指定的话表示不过滤;
第七个参数指定查询结果的排序方式。
Cursor cursor = db.query("Student", null, null, null, null, null, null);#查询Student中所有数据 if (cursor.moveToFirst()){ do { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); }while (cursor.moveToNext()); } cursor.close();
改
db.update(String, ContentValues, String, String []):参数:
String:表名
ContentValues:更新数据
最后两个参数用于约束修改某一行或者几行的数据,不指定的话修改所有行。第三个参数对应SQL语句的where。
ContentValues record = new ContentValues(); record.put("age", 13); db.update("Student", record, "name=?", new String [] {"V"});//?是占位符,第四个参数提供的字符串数组中的每个字符串去填充?,应该在内部执行了一个for循环。
还可以通过SQL语句进行增删查改。
其他
onCreate方法的使用
假设要向数据库中再添加一个表,在onCreate()方法中添加一条建表语句,但是由于同名数据库已经存在,并不会再次执行onCreate()。这里就需要用到onUpgrade()方法。但是如何让onUpgrade()方法执行?既然问这个问题,就表明和onCreate()方法一样并不是开发者显式调用。秘密在数据库的版本号上。只要修改构建MySQLHelper实例时传入的版本号,使其比之前大,就会执行onUpgrade()方法。public class MySQLHelper extends SQLiteOpenHelper{ public static final String CREATE_STUDENT = "create table Student (" + "id integer primary key autoincrement, " + "name text, " + "age integer)"; public static final String CREATE_TEACHER = "create table Teacher (" + "id integer primary key autoincrement, " + "name text, " + "age integer)"; private Context mContext; public MySQLHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_STUDENT); db.execSQL(CREATE_TEACHER); Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrage(SQLiteDatabase db, int oldVersion, int newVersion){ db.execSQL("drop table if exists Student"); db.execSQL("drop table if exists Teacher"); onCreate(db); } }
MySQLHelper dbHelper = new MySQLHelper(this, "School.db", null, 2);
数据库的位置
/data/data/com.example.victoria.mediaplayer/databases/相关文章推荐
- android activity的windowSoftInputMode属性
- ViewPager写的三字经程序,外加三字经朗读,用了MediaPlayer
- Android CountDownTimer学习使用
- 简单理解回调
- android 视频播放的三种方式(并包含弹幕)
- Android输入法弹出,布局上移,背景不会压缩
- [android] 与PHP的session进行交互demo
- Android-ContentProvider内容提供者
- JNI开发流程(androidstudio)
- Android Studio快捷键
- Android:interpolator
- android开发中设置基础类BaseActivity
- Intent的简单介绍
- Android aar打包碰到的问题
- android音频降噪webrtc
- Android Studio中svn的使用(全部在这里)
- android ijkplayer 通过rtsp直播
- Android性能优化系列之apk瘦身
- Android导出aar时嵌套引用的那些坑
- Android Dialog总结