第四章 访问SQLite数据库

访问SQLite数据库:

      自定义类 继承SQLiteOpenHelper 覆写2个抽象方法

           onCreate方法------数据库第一次创建时执行

           onUpgrade方法-----数据库版本号发生改变时执行

          

      OpenHelper所实例化出来的对象来获取SQLiteDatabase对象

           .getWritableDatabase()  可读可写

           .getReadableDatabase() 只读

          

      执行Sql语句:db.execSQL(Sql语句);

     

      数据库的默认保存路径:data/data/<包名>/databases/....

      数据库的关闭操做 一般在Activity的onDestory中关闭。

     

增:使用db.insert(表名,null,ContentValues);

      向contentValues.put(KEY,VALUE);

      KEY字段名,VALUE即插入该字段中的数据

      向主键插入null用:contentValues.putNull(主键);

     

      返回值:行号!不是_id主键!

     

查:使用db.query(String table, String[] columns, String selection,

                            String[] selectionArgs, String groupBy, String having, String orderBy);

      第一个参数:表名

      第二个参数:所要查询的字段数组 如果查询所有则为null

      第三个参数:相当于where之后的过滤条件 值用?代替

      第四个参数:数组中的每一个元素与之前的?一一对应

      。

     

关于Cursor的方法:

      有关Cursor指针移动的方法:

      movetoFirst —- 将Cursor移到第一条记录

      moveToLast —-- 将Cursor移到最后一条记录

      moveToPrevious  --— 将Cursor向前移动一个位置

      moveToNext —-- 将Cursor向后移动一个位置

      moveToPosition —-- 将Cursor移动到指定的位置

 

      有关获取数据的方法:

      getCount — 返回结果集中的记录总数

      getInt/getString/getFloat() …… — 返回当前记录中指定字段的值(对应字段应为int/String/Float等类型)里面传的参数是我所要查询的字段索引

      getColumnCount — 返回当前记录的字段数量

      getColumnName — 返回当前记录的字段名称

     

      有关判断Cursor位置的方法:

      isBeforeFirst — 判断Cursor是否指向空白位

      isAfterLast — 判断Cursor是否指向最后一条记录之后

      isClosed — 判断Cursor是否关闭

      isFirst — 判断Cursor是否指向第一条记录

      isLast — 判断Cursor是否指向最后一条记录

      isNull — 判断指定位置的值是否为null

     

      游标使用完毕以后要做关闭操作

     

改:db.update(String table, ContentValues values, String whereClause, String[] whereArgs)

      第一个参数:表名

      第二个参数:要修改的字段名和值

      第三个参数:过滤条件

      第四个参数:数组中的每一个元素与之前的?一一对应

     

删:db.delete(String table, String whereClause, String[] whereArgs)

      第一个参数:表名

      第二个参数:过滤条件

      第三个参数:数组中的每一个元素与之前的?一一对应

 

 

案例代码:

           1.在package com.example.administrator.dbdemo.model创建MusicDBHelper extends SQLiteOpenHelper

 1 public class MusicDBHelper extends SQLiteOpenHelper
 2 {
 3     private static final String DATABASE_NAME = "music.db";
 4     private static final int VERSION = 1;
 5 
 6     /**
 7      * 构造器
 8      *
 9      * @param context
10      * @param name
11      * @param factory 游标工厂,通常null
12      * @param version
13      */
14     public MusicDBHelper(Context context)
15     {
16         super(context, DATABASE_NAME, null, VERSION);
17     }
18 
19     /**
20      * 创建数据库时调用本方法(只有没有该数据库时才运行)
21      * @param db
22      */
23     @Override
24     public void onCreate(SQLiteDatabase db)
25     {
26         String sqlCreateTable =
27                 "create table " + CommonData.TABLE_NAME + "(" +
28                         CommonData.FIELD_ID + " integer primary key autoincrement, " +
29                         CommonData.FIELD_NAME + " char(20), " +
30                         CommonData.FIELD_PLAYER + " char(20), " +
31                         CommonData.FIELD_PATH + " char(80) " +
32                 ")";
33         db.execSQL(sqlCreateTable);
34         Log.e("MusicDBHelper", "sqlCreateTable");
35 
36         String[] sqlInsert =
37                 {
38                         " values(1,'传奇','王菲','chuanqi.mp3')",
39                         " values(2,'小酒窝','蔡卓妍','xiaojiuwo.mp3')",
40                         " values(3,'分吹麦浪','李健','fengchuimailang.mp3')",
41                         " values(4,'荷塘月色','凤凰传奇','hetangyuese.mp3')",
42                         " values(5,'蓝莲花','许巍','lanlianhua.mp3')",
43                         " values(6,'兰亭序','周杰伦','lantingxu.mp3')",
44                 };
45         for(String sql : sqlInsert)
46         {
47             db.execSQL("insert into " + CommonData.TABLE_NAME + sql);
48         }
49         Log.e("MusicDBHelper", "sqlInsert");
50     }
51 
52     /**
53      * 更新数据库时调用本方法
54      * @param db
55      * @param oldVersion
56      * @param newVersion
57      */
58     @Override
59     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
60     {
61         Log.e("MusicDBHelper", "onUpgrade");
62     }
63 }

           2.在package com.example.administrator.dbdemo.model创建MusicModel.java

  1 public class MusicModel
  2 {
  3     private SQLiteOpenHelper dbHelper;
  4     private SQLiteDatabase database;
  5 
  6     /**
  7      * 通过构造器得到dbHelper
  8      * @param context
  9      */
 10     public MusicModel(Context context)
 11     {
 12         this.dbHelper = new MusicDBHelper(context);
 13     }
 14 
 15     /**
 16      * 创建database数据库对象(打开database数据库对象)
 17      */
 18     public void openDatabase()
 19     {
 20         if (database != null)
 21         {
 22             return;
 23         }
 24         database = dbHelper.getWritableDatabase();
 25     }
 26 
 27     /**
 28      * 关闭database
 29      */
 30     public void closeDatabase()
 31     {
 32         database.close();
 33         database = null;
 34     }
 35 
 36     /**
 37      * 插入music数据
 38      *
 39      * @param music
 40      */
 41     public void insertDB(Music music)
 42     {
 43         //values---对于插入记录数据, 需通过ContentValues对象来提供
 44         ContentValues values = new ContentValues();
 45         //在values中放入数据
 46         values.put(CommonData.FIELD_ID, music.getId());
 47         values.put(CommonData.FIELD_NAME, music.getName());
 48         values.put(CommonData.FIELD_PLAYER, music.getPlayer());
 49         values.put(CommonData.FIELD_PATH, music.getFilepath());
 50         //将数据插入数据库
 51         //参数: 表格名  通常为null(如果所插入的记录都为null)    values
 52         database.insert(CommonData.TABLE_NAME, null, values);
 53     }
 54 
 55     /**
 56      * 查询  query 疑问n
 57      *
 58      * @param columns
 59      * @param selection
 60      * @param selectionArgs
 61      * @return list
 62      */
 63     public List<Music> queryDB(String[] columns, String selection, String[] selectionArgs)
 64     {
 65         String groupBy = null, having = null, orderBy = null;
 66         //参数: 表名,查询要返回的列,查询条件(对应SQL where语句),指定查询条件中参数的值........
 67         Cursor cursor = database.query(         //cursor 游标
 68                 CommonData.TABLE_NAME, columns, selection, selectionArgs, groupBy, having, orderBy
 69         );
 70         List<Music> list = new ArrayList<Music>();
 71         //通过cursor对象获取查询对象的值
 72         if (cursor != null)
 73         {
 74             while (cursor.moveToNext())
 75             {
 76                 Music music = new Music(
 77                         cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
 78                 list.add(music);
 79             }
 80             cursor.close();//TODO 关闭游标
 81         }
 82         return list;
 83     }
 84 
 85     /**
 86      * 修改(更新)表格内容
 87      *
 88      * @param music
 89      */
 90     public void updateDBById(Music music)
 91     {
 92         if (music.getId() <= 0)
 93         {
 94             return;
 95         }
 96         ContentValues values = new ContentValues();
 97         if (music.getName() != null)
 98         {
 99             values.put(CommonData.FIELD_NAME, music.getName());
100         }
101         if (music.getPlayer() != null)
102         {
103             values.put(CommonData.FIELD_PLAYER, music.getPlayer());
104         }
105         if (music.getFilepath() != null)
106         {
107             values.put(CommonData.FIELD_PATH, music.getFilepath());
108         }
109 
110         String where = CommonData.FIELD_ID + "=?";
111         String[] args = {"" + music.getId()};
112         //参数: 1.表格名  2.新的记录数据values(ContentValues) 3.过滤条件  4.过滤条件中站位符的值
113         database.update(CommonData.TABLE_NAME, values, where, args);
114     }
115 
116     /**
117      * 删除表格中的数据
118      * @param id
119      */
120     public void daleteDBById(int id)
121     {
122         if (id <= 0)
123         {
124             return;
125         }
126         String where = CommonData.FIELD_ID + "=?";
127         String[] args = {"" + id};
128         //参数: 表名 过滤条件 过滤条件中参数的值
129         database.delete(CommonData.TABLE_NAME, where, args);
130     }
131 
132     /**
133      * 获取表格中有多少条记录
134      * @return count
135      */
136     public int getRowCount()//row  行n
137     {
138         String sqlStr = "select * from " + CommonData.TABLE_NAME;
139         //TODO rawQuery()方法  raw 未加工的adj
140         Cursor cursor = database.rawQuery(sqlStr, null);
141         int count = cursor.getCount();
142         cursor.close();
143         return count;
144     }
145 }

     

    3.编辑activity中的代码,通过调用new MusicModel 对象,调用其方法完成页面显示内容

 1 public class MainActivity extends Activity
 2 {
 3     private MusicModel model;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState)
 7     {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10 
11         model = new MusicModel(this);
12         initView();
13         initData();
14     }
15 
16     /**
17      * 活动开始时打开数据库 TODO
18      */
19     @Override
20     protected void onStart()
21     {
22         super.onStart();
23         model.openDatabase();
24     }
25 
26     /**
27      * huodo结束时关闭数据库    TODO
28      */
29     @Override
30     protected void onStop()
31     {
32         super.onStop();
33         model.closeDatabase();
34     }
35 
36     private void initData()
37     {
38         //............
39     }
40 
41     private void initView()
42     {
43         //............
44     }
45 }

 

posted on 2015-12-05 20:26  starFarming  阅读(255)  评论(0编辑  收藏  举报