当前位置:   article > 正文

安卓SQLiteDatabase数据库的使用_安卓 mydbopenhelper

安卓 mydbopenhelper

1.创建MyDBOpenHelper继承自SQLiteOpenHelper用来管理数据库

  1. public class MyDBOpenHelper extends SQLiteOpenHelper {
  2. public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){
  3. super(context,name,null,version);
  4. }
  5. //数据库第一次创建时被调用
  6. //在数据库第一次创建时,添加已知需要创建的固定表格
  7. @Override
  8. public void onCreate(SQLiteDatabase sqLiteDatabase) {
  9. sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)");
  10. sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)");
  11. }
  12. //软件版本号发生改变时调用
  13. @Override
  14. public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
  15. }
  16. }

2.创建SQLManager数据库管理类,设置为单利

  1. public class SQLManager {
  2. private MyDBOpenHelper dbOpenHelper;
  3. public MyDBOpenHelper getDbOpenHelper() {
  4. return dbOpenHelper;
  5. }
  6. public void setDbOpenHelper(MyDBOpenHelper dbOpenHelper) {
  7. this.dbOpenHelper = dbOpenHelper;
  8. }
  9. // 内部类实现单利模式
  10. // 延迟加载,减少内存开销
  11. private static class SQLManagerHolder{
  12. private static SQLManager instance = new SQLManager();
  13. }
  14. // 私有的构造函数
  15. private SQLManager(){
  16. }
  17. public static SQLManager getInstance(){
  18. return SQLManagerHolder.instance;
  19. }
  20. }

3.首次使用时创建数据库

  1. private void initDataBase() {
  2. SQLManager sqlManager = SQLManager.getInstance();
  3. MyDBOpenHelper myDBOpenHelper = new MyDBOpenHelper(context,"my.db",null,1);
  4. sqlManager.setDbOpenHelper(myDBOpenHelper);
  5. }

4.进行增删改查数据库时从单利中获取

  1. private void deletePerson() {
  2. SQLManager sqlManager = SQLManager.getInstance();
  3. MyDBOpenHelper dbOpenHelper = sqlManager.getDbOpenHelper();
  4. SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
  5. database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()});
  6. finish();
  7. }

获取到SQLiteDatabase后,使用该对象执行对应的SQL语句。

5.创建表格

  1. //数据库第一次创建时被调用
  2. @Override
  3. public void onCreate(SQLiteDatabase sqLiteDatabase) {
  4. sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)");
  5. sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)");
  6. }

对于已知需要使用的表格在MyDBOpenHelper的onCreate的方法中进行创建。

以第一个persons表为例:

创建表名为persons的表,表中字段id为自动增长主键 int型使用INTEGER表示,name 字符串型使用VARCHAR表示,money 浮点型使用REAL表示。

6.往表格中添加数据

database.execSQL("INSERT INTO persons (name,money,ratio)values(?,?,?)", new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getRatio()});

对应的字段类型相对应。(database获取办法在第四步)

7.删除表格中的某条数据

database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()});

表示根据id从persons表格中删除数据。

8.修改表格中的某条数据

database.execSQL("UPDATE persons SET name = ?,money = ? WHERE id = ?",new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getId()});

修改persons表中id为当前获取mainModel的id的数据,重新设置name和money两个字段。

9.查询表格中数据

查询某一表格中所有数据

  1. List<MainModel> mainModels = new LinkedList<>();
  2. SQLiteDatabase database = myDBOpenHelper.getReadableDatabase();
  3. Cursor cursor = database.rawQuery("SELECT * FROM persons",null);
  4. //存在数据返回true
  5. while (cursor.moveToNext()){
  6. MainModel model = new MainModel();
  7. int id = cursor.getInt(cursor.getColumnIndex("id"));
  8. model.setId(String.valueOf(id));
  9. String name = cursor.getString(cursor.getColumnIndex("name"));
  10. model.setName(name);
  11. String money = cursor.getString(cursor.getColumnIndex("money"));
  12. model.setMoney(Float.valueOf(money));
  13. mainModels.add(model);
  14. }

根据条件查询数据

  1. Cursor cursor1 = database.rawQuery("SELECT * FROM persons WHERE id = ?", new String[]{"1"});
  2. //存在数据返回true
  3. float sum = 0.f;
  4. while (cursor1.moveToFirst()){
  5. MainModel model = new MainModel();
  6. int id = cursor1.getInt(cursor1.getColumnIndex("id"));
  7. model.setId(String.valueOf(id));
  8. String name = cursor1.getString(cursor1.getColumnIndex("name"));
  9. model.setName(name);
  10. }

因为主键是唯一的,所以查询的数据只有一条。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号