在上一篇文章:http://blog.csdn.net/qq_34942689/article/details/65633451 中简单的介绍了一下Android中用于数据存储的一些方式,上一篇文章中介绍了SharedPreferences的使用以及我个人的一些封装,接下来呢就来介绍一下Android存储提供的数据存储方式的第二个SQLite数据存储。
SQLite是一种转为嵌入式的轻量级的数据库,比较适合少量数据的存储;在使用过程允许使用SQL语句操作数据库,其操作的本质上是一个文件,不需要安装和启动,在操作过程中,SQLite数据库是打开了一个文件的读写流,但是SQLite比较适合少量数据的读写以及存储。
接下来就介绍一下SQLite数据的一些使用步骤:
步骤一:创建操作数据库的辅助类
public class MySQLHelper extends SQLiteOpenHelper { // 数据库名称 public static final String DBNAME = "text.db"; // 数据库版本 public static final int VERSION = 2; // 建表语句,大小写不敏感 private static final String CREATETABLE = "create table " + "(id string, name string, gender int, age int)"; public MySQLHelper(Context context) { super(context, DBNAME, null, VERSION); } // 创建表 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATETABLE); } /** * 更新表 * @param db 表名 * @param oldVersion 旧版本 * @param newVersion 新版本 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { this.deleteDB(db); this.onCreate(db); } /** * 删除表 * @param db 表名 */ private void deleteDB(SQLiteDatabase db) { db.execSQL("drop table if exists "); } }
步骤二:数据库的操作
public class DateBaseHelper { //引入数据库操作的辅助类 private MySQLHelper dbHelper; public DateBaseHelper(Context context) { dbHelper = new MySQLHelper(context); } /** * 插入的方法 * * @param person 对象 * @return 返回值 */ public int insert(Person person) { SQLiteDatabase db = dbHelper.getWritableDatabase();//获取数据库的操作类 db.beginTransaction();//开启 try { db.execSQL("insert into " + Person.TABLENAME + " values(?, ?, ?, ?)", new Object[]{person.id, person.name, person.age}); db.setTransactionSuccessful(); } catch (Exception e) { return 0; } finally { db.endTransaction(); } db.close(); return 1; } /** * 更新 * @param person * @return */ public int update(Person person) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { db.execSQL("update " + Person.TABLENAME + " set name=?, gender=?, age=? where id=?", new Object[]{ person.name, person.age, person.id}); db.setTransactionSuccessful(); } catch (Exception e) { return 0; } finally { db.endTransaction(); } db.close(); return 1; } /** * 查询 * * @param id * @return */ public ArrayList<Person> query(String id) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor; Person person; ArrayList<Person> list = new ArrayList<Person>(); // 若fileId为null或""则查询所有记录 if (id == null || id.equals("")) { cursor = db.rawQuery("select * from " + Person.TABLENAME, null); } else { cursor = db.rawQuery("select * from " + Person.TABLENAME + " where id=?", new String[]{id}); } while (cursor.moveToNext()) { person = new Person(); person.id = cursor.getString(cursor.getColumnIndex("id")); person.name = cursor.getString(cursor.getColumnIndex("name")); person.age = cursor.getInt(cursor.getColumnIndex("age")); Log.e("SQLite", person.toString()); list.add(person); } cursor.close(); db.close(); if (list.size() == 0) { Log.d("SQLite", "表中无数据"); } return list; } }
这里呢我写了三个方法,其中删除的方法没写,因为删除的方法其实和增加的方法是差不多的,区别在于操作的sql语句不同。
在操作的过程中需要注意几点:
1:数据库的操作类对象需要通过辅助类去获取;
2:事物在开启之后一定要关闭。
在Android中操作SQLite数据的时候一共需要用到SQLiteOpenHelper,SQLiteDatabase,Cursor(游标)三个类,下面是其中的一些参数和构造方法的解释
1.SQLiteOpenHelper
SQLiteOpenHelper 构造方法,一般传递一个要创建的数据库名称name参数
onCreate 创建数据库时调用
onUpgrade 版本更新时调用
getReadableDatabase 创建或打开一个只读数据库
getWritableDatabase 创建或打开一个读写数据库
2.SQLiteDatabase
openOrCreateDatabase 打开或者创建数据库
insert 添加一条记录
delete 删除一条记录
query 查询记录
update 更新记录
execSQL 执行一条SQL语句
close 关闭数据库
3.Cursor
getCount 总记录条数
isFirst 判断是否第一条记录
isLast 判断是否最后一条记录
moveToFirst 移动到第一条记录
moveToLast 移动到最后一条记录
move 移动到指定记录
moveToNext 移动到下一条记录
moveToPrevious 移动到上一条记录
getColumnIndexOrThrow根据列名称获得列索引
getInt 获得指定列索引的int类型值
getString 获得指定列索引的String类型值
至此呢一个简单的SQLite数据存储操作就结束了,最后别忘了权限哦,谢谢
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>