Android打造属于自己的数据库操作类。

转自:http://blog.csdn.net/yissan/article/details/51494667


1、概述

开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建、管理数据库。但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类。

2、操作类的初显形

假设现在我们什么都没有,我们要去搞一个对象来给我们干这件事情,它需要有什么才可以干呢?
先想想要做的事情:管理数据库的操作
那要做数据库的操作需要什么就很简单了吧?
1、要操作数据库,所以需要一个SQLiteDataBase对象,可以通过SQLiteOpenHelper的子类来获取。
2、此外数据库要创建,还需要数据库信息吧?那就直接变量引入。
3、有了数据库信息,创建了数据库,你要操作,怎么也得告诉我操作哪个表。所以还得包含创建表和更新表的信息,由于表一般会有多张,所以这里用一个数组变量。

有了信息还得交互,不然我怎么知道你要怎么创建表,所以我们在构造方法中直接获取这些信息。

接下看上面文字的代码表示

<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">abstract</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DataBaseHelper</span> {</span>

     <span class="hljs-javadoc">/**
     * 用来创建和获取数据库的SQLiteOpenHelper
     */</span>
    <span class="hljs-keyword">protected</span> DBHelper mDbHelper;
    <span class="hljs-javadoc">/**
     * 数据库对象
     */</span>
    <span class="hljs-keyword">protected</span> SQLiteDatabase mDb;

    <span class="hljs-javadoc">/**
     * 数据库信息
     */</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> mDbVersion;<span class="hljs-comment">//版本</span>
    <span class="hljs-keyword">private</span> String mDbName;<span class="hljs-comment">//数据库名</span>
    <span class="hljs-javadoc">/**
     * 创建表语句
     */</span>
    <span class="hljs-keyword">private</span> String[] mDbCreateSql;
    <span class="hljs-javadoc">/**
     * 更新表语句
     */</span>
    <span class="hljs-keyword">private</span> String[] mDbUpdateSql;

    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">abstract</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getMDbVersion</span>(Context context);

    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">abstract</span> String <span class="hljs-title">getDbName</span>(Context context);

    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">abstract</span> String[] <span class="hljs-title">getDbCreateSql</span>(Context context);

    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">abstract</span> String[] <span class="hljs-title">getDbUpdateSql</span>(Context context);

    <span class="hljs-keyword">public</span> <span class="hljs-title">DataBaseHelper</span>(Context context) {
        <span class="hljs-keyword">this</span>.mDbVersion = <span class="hljs-keyword">this</span>.getMDbVersion(context);
        <span class="hljs-keyword">this</span>.mDbName = <span class="hljs-keyword">this</span>.getDbName(context);
        <span class="hljs-keyword">this</span>.mDbCreateSql = <span class="hljs-keyword">this</span>.getDbCreateSql(context);
        <span class="hljs-keyword">this</span>.mDbUpdateSql = <span class="hljs-keyword">this</span>.getDbUpdateSql(context);
        <span class="hljs-keyword">this</span>.mDbHelper = <span class="hljs-keyword">new</span> DBHelper(context,<span class="hljs-keyword">this</span>.mDbName,<span class="hljs-keyword">null</span>,<span class="hljs-keyword">this</span>.mDbVersion);
    }

    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">open</span>(){
        mDb = mDbHelper.getWritableDatabase();
    }

    <span class="hljs-keyword">protected</span> SQLiteDatabase <span class="hljs-title">getDB</span>(){
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.mDb;
    }


    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">close</span>(){
        <span class="hljs-keyword">this</span>.mDb.close();
        <span class="hljs-keyword">this</span>.mDbHelper.close();
    }

    <span class="hljs-keyword">private</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DBHelper</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">SQLiteOpenHelper</span>{</span>

        <span class="hljs-keyword">public</span> <span class="hljs-title">DBHelper</span>(Context context, String name, SQLiteDatabase.CursorFactory factory, <span class="hljs-keyword">int</span> version) {
            <span class="hljs-keyword">super</span>(context, name, factory, version);
        }

        <span class="hljs-annotation">@Override</span>
        <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(SQLiteDatabase db) {
            String[] arr = DataBaseHelper.<span class="hljs-keyword">this</span>.mDbCreateSql;
            <span class="hljs-comment">//执行创建表语句</span>
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<arr.length;i++){
                String sql = arr[i];
                db.execSQL(sql);
            }
        }

        <span class="hljs-annotation">@Override</span>
        <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onUpgrade</span>(SQLiteDatabase db, <span class="hljs-keyword">int</span> oldVersion, <span class="hljs-keyword">int</span> newVersion) {
            String[] arr = DataBaseHelper.<span class="hljs-keyword">this</span>.mDbUpdateSql;
             <span class="hljs-comment">//执行更新语句</span>
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<arr.length;i++){
                String sql = arr[i];
                db.execSQL(sql);
            }
        }
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li></ul>

代码比较简单,包含了进行数据库操作要用到的各种信息,并且在初始化的进行了赋值。同时还提供了SQLiteDatabase的open、close。同时在这里用到了抽象方法是因为考虑创建多个数据库的情况,让子类来提供具体的数据库信息,我只管做创建和操作就行了。

这里我们的数据库操作类已经初显雏形了,但是现在除了创建表还没什么用。操作类不提供简便的操作还叫什么操作类,下面就来说说操作。

我们要做操作类,无非是要简化操作,就像当老板一样。我告诉你一些用到的东西,你去给我完成这个事情。哈哈。

假如我现在就是要操作数据库的老板,那我其实只想告诉你必要的事情,其它的我都不想做。

那么必要的信息只有表名,要操作的字段和值,如果是删除、更新、和查询的话多加个筛选条件。接下来看代码

<code class="hljs java has-numbering">
 <span class="hljs-javadoc">/**
     * 统一对ContentValues处理
     *<span class="hljs-javadoctag"> @param</span> contentValues
     *<span class="hljs-javadoctag"> @param</span> key
     *<span class="hljs-javadoctag"> @param</span> value
     */</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">ContentValuesPut</span>(ContentValues contentValues,String key,Object value){
        <span class="hljs-keyword">if</span> (value==<span class="hljs-keyword">null</span>){
            contentValues.put(key,<span class="hljs-string">""</span>);
        }<span class="hljs-keyword">else</span>{
            String className = value.getClass().getName();
            <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.String"</span>)){
                contentValues.put(key,value.toString());
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Integer"</span>)){
                contentValues.put(key,Integer.valueOf(value.toString()));
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Float"</span>)){
                contentValues.put(key,Float.valueOf(value.toString()));
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Double"</span>)){
                contentValues.put(key,Double.valueOf(value.toString()));
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Boolean"</span>)){
                contentValues.put(key,Boolean.valueOf(value.toString()));
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Long"</span>)){
                contentValues.put(key,Long.valueOf(value.toString()));
            } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (className.equals(<span class="hljs-string">"java.lang.Short"</span>)){
                contentValues.put(key,Short.valueOf(value.toString()));
            }
        }
    }

    <span class="hljs-javadoc">/**
     * 根据数组的列和值进行insert
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> columns
     *<span class="hljs-javadoctag"> @param</span> values
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">insert</span>(String tableName,String[] columns,Object[] values){
        ContentValues contentValues = <span class="hljs-keyword">new</span> ContentValues();
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> rows = <span class="hljs-number">0</span>; rows < columns.length;++rows){
             ContentValuesPut(contentValues,columns[rows],values[rows]);
        }
        <span class="hljs-keyword">long</span> rowId = <span class="hljs-keyword">this</span>.mDb.insert(tableName,<span class="hljs-keyword">null</span>,contentValues);
        <span class="hljs-keyword">return</span> rowId!=-<span class="hljs-number">1</span>;
    }

    <span class="hljs-javadoc">/**
     * 根据map来进行insert
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> columnValues
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">insert</span>(String tableName,Map<String,Object> columnValues){
        ContentValues contentValues = <span class="hljs-keyword">new</span> ContentValues();
        Iterator iterator = columnValues.keySet().iterator();
        <span class="hljs-keyword">while</span> (iterator.hasNext()){
            String key = (String) iterator.next();
            <span class="hljs-keyword">this</span>.ContentValuesPut(contentValues,key,columnValues.get(key));
        }

        <span class="hljs-keyword">long</span> rowId = <span class="hljs-keyword">this</span>.mDb.insert(tableName,<span class="hljs-keyword">null</span>,contentValues);
        <span class="hljs-keyword">return</span> rowId!=-<span class="hljs-number">1</span>;
    }


    <span class="hljs-javadoc">/**
     * 统一对数组where条件进行拼接
     *<span class="hljs-javadoctag"> @param</span> whereColumns
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">private</span> String <span class="hljs-title">initWhereSqlFromArray</span>(String[] whereColumns){
        StringBuffer whereStr = <span class="hljs-keyword">new</span> StringBuffer();
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<whereColumns.length;++i){
            whereStr.append(whereColumns[i]).append(<span class="hljs-string">" = ? "</span>);
            <span class="hljs-keyword">if</span> (i<whereColumns.length-<span class="hljs-number">1</span>){
                whereStr.append(<span class="hljs-string">" and "</span>);
            }
        }
        <span class="hljs-keyword">return</span> whereStr.toString();
    }

    <span class="hljs-javadoc">/**
     * 统一对map的where条件和值进行处理
     *<span class="hljs-javadoctag"> @param</span> whereParams
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">private</span> Map<String,Object> <span class="hljs-title">initWhereSqlFromMap</span>(Map<String,String> whereParams){
        Set set = whereParams.keySet();
        String[] temp = <span class="hljs-keyword">new</span> String[whereParams.size()];
        <span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>;
        Iterator iterator = set.iterator();
        StringBuffer whereStr = <span class="hljs-keyword">new</span> StringBuffer();
        <span class="hljs-keyword">while</span> (iterator.hasNext()){
            String key = (String) iterator.next();
            whereStr.append(key).append(<span class="hljs-string">" = ? "</span>);
            temp[i] = whereParams.get(key);
            <span class="hljs-keyword">if</span> (i<set.size()-<span class="hljs-number">1</span>){
                whereStr.append(<span class="hljs-string">" and "</span>);
            }
            i++;
        }
        HashMap result = <span class="hljs-keyword">new</span> HashMap();
        result.put(<span class="hljs-string">"whereSql"</span>,whereStr);
        result.put(<span class="hljs-string">"whereSqlParam"</span>,temp);
        <span class="hljs-keyword">return</span> result;
    }


    <span class="hljs-javadoc">/**
     * 根据数组条件来update
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> columns
     *<span class="hljs-javadoctag"> @param</span> values
     *<span class="hljs-javadoctag"> @param</span> whereColumns
     *<span class="hljs-javadoctag"> @param</span> whereArgs
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">update</span>(String tableName,String[] columns,Object[] values,String[] whereColumns,String[] whereArgs){
        ContentValues contentValues = <span class="hljs-keyword">new</span> ContentValues();
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<columns.length;++i){
            <span class="hljs-keyword">this</span>.ContentValuesPut(contentValues,columns[i],values[i]);
        }
        String whereClause = <span class="hljs-keyword">this</span>.initWhereSqlFromArray(whereColumns);
        <span class="hljs-keyword">int</span> rowNumber = <span class="hljs-keyword">this</span>.mDb.update(tableName,contentValues,whereClause,whereArgs);
        <span class="hljs-keyword">return</span> rowNumber > <span class="hljs-number">0</span> ;
    }

    <span class="hljs-javadoc">/**
     * 根据map值来进行update
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> columnValues
     *<span class="hljs-javadoctag"> @param</span> whereParam
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">update</span>(String tableName,Map<String,Object> columnValues,Map<String,String> whereParam){
        ContentValues contentValues = <span class="hljs-keyword">new</span> ContentValues();
        Iterator iterator = columnValues.keySet().iterator();

        String columns;
        <span class="hljs-keyword">while</span> (iterator.hasNext()){
            columns = (String) iterator.next();
            ContentValuesPut(contentValues,columns,columnValues.get(columns));
        }

        Map map = <span class="hljs-keyword">this</span>.initWhereSqlFromMap(whereParam);
        <span class="hljs-keyword">int</span> rowNumber = <span class="hljs-keyword">this</span>.mDb.update(tableName,contentValues,(String)map.get(<span class="hljs-string">"whereSql"</span>),(String[]) map.get(<span class="hljs-string">"whereSqlParam"</span>));
        <span class="hljs-keyword">return</span> rowNumber > <span class="hljs-number">0</span>;
    }

    <span class="hljs-javadoc">/**
     * 根据数组条件进行delete
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> whereColumns
     *<span class="hljs-javadoctag"> @param</span> whereParam
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">delete</span>(String tableName,String[] whereColumns,String[] whereParam){
        String whereStr = <span class="hljs-keyword">this</span>.initWhereSqlFromArray(whereColumns);
        <span class="hljs-keyword">int</span> rowNumber = <span class="hljs-keyword">this</span>.mDb.delete(tableName,whereStr,whereParam);
        <span class="hljs-keyword">return</span> rowNumber > <span class="hljs-number">0</span>;
    }


    <span class="hljs-javadoc">/**
     * 根据map来进行delete
     *<span class="hljs-javadoctag"> @param</span> tableName
     *<span class="hljs-javadoctag"> @param</span> whereParams
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">delete</span>(String tableName,Map<String,String> whereParams){
        Map map = <span class="hljs-keyword">this</span>.initWhereSqlFromMap(whereParams);
        <span class="hljs-keyword">int</span> rowNumber = <span class="hljs-keyword">this</span>.mDb.delete(tableName,map.get(<span class="hljs-string">"whereSql"</span>).toString(),(String[]) map.get(<span class="hljs-string">"whereSqlParam"</span>));
        <span class="hljs-keyword">return</span> rowNumber > <span class="hljs-number">0</span>;
    }


    <span class="hljs-javadoc">/**
     * 查询返回List
     *<span class="hljs-javadoctag"> @param</span> sql
     *<span class="hljs-javadoctag"> @param</span> params
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> List<Map> <span class="hljs-title">queryListMap</span>(String sql,String[] params){
        ArrayList list = <span class="hljs-keyword">new</span> ArrayList();
        Cursor cursor = <span class="hljs-keyword">this</span>.mDb.rawQuery(sql,params);
        <span class="hljs-keyword">int</span> columnCount = cursor.getColumnCount();
        <span class="hljs-keyword">while</span> (cursor.moveToNext()){
            HashMap item = <span class="hljs-keyword">new</span> HashMap();
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<columnCount;++i){
                <span class="hljs-keyword">int</span> type = cursor.getType(i);
                <span class="hljs-keyword">switch</span> (type){
                    <span class="hljs-keyword">case</span> <span class="hljs-number">0</span>:
                        item.put(cursor.getColumnName(i),<span class="hljs-keyword">null</span>);
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">1</span>:
                        item.put(cursor.getColumnName(i), cursor.getInt(i));
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">2</span>:
                        item.put(cursor.getColumnName(i),cursor.getFloat(i));
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">3</span>:
                        item.put(cursor.getColumnName(i),cursor.getString(i));
                        <span class="hljs-keyword">break</span>;
                }
            }
            list.add(item);
        }
        cursor.close();
        <span class="hljs-keyword">return</span> list;
    }

    <span class="hljs-javadoc">/**
     * 查询单条数据返回map
     *<span class="hljs-javadoctag"> @param</span> sql
     *<span class="hljs-javadoctag"> @param</span> params
     *<span class="hljs-javadoctag"> @return</span>
     */</span>
    <span class="hljs-keyword">public</span> Map <span class="hljs-title">queryItemMap</span>(String sql,String[] params){
        Cursor cursor = <span class="hljs-keyword">this</span>.mDb.rawQuery(sql,params);
        HashMap map = <span class="hljs-keyword">new</span> HashMap();
        <span class="hljs-keyword">if</span> (cursor.moveToNext()){
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>;i < cursor.getColumnCount();++i){
                <span class="hljs-keyword">int</span> type = cursor.getType(i);
                <span class="hljs-keyword">switch</span> (type){
                    <span class="hljs-keyword">case</span> <span class="hljs-number">0</span>:
                        map.put(cursor.getColumnName(i),<span class="hljs-keyword">null</span>);
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">1</span>:
                        map.put(cursor.getColumnName(i),cursor.getInt(i));
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">2</span>:
                        map.put(cursor.getColumnName(i),cursor.getFloat(i));
                        <span class="hljs-keyword">break</span>;
                    <span class="hljs-keyword">case</span> <span class="hljs-number">3</span>:
                        map.put(cursor.getColumnName(i),cursor.getString(i));
                        <span class="hljs-keyword">break</span>;
                }
            }
        }
        cursor.close();
        <span class="hljs-keyword">return</span> map;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">execSQL</span>(String sql){
        <span class="hljs-keyword">this</span>.mDb.execSQL(sql);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">execSQL</span>(String sql,Object[] params){
        <span class="hljs-keyword">this</span>.mDb.execSQL(sql,params);
    }
</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li><li>111</li><li>112</li><li>113</li><li>114</li><li>115</li><li>116</li><li>117</li><li>118</li><li>119</li><li>120</li><li>121</li><li>122</li><li>123</li><li>124</li><li>125</li><li>126</li><li>127</li><li>128</li><li>129</li><li>130</li><li>131</li><li>132</li><li>133</li><li>134</li><li>135</li><li>136</li><li>137</li><li>138</li><li>139</li><li>140</li><li>141</li><li>142</li><li>143</li><li>144</li><li>145</li><li>146</li><li>147</li><li>148</li><li>149</li><li>150</li><li>151</li><li>152</li><li>153</li><li>154</li><li>155</li><li>156</li><li>157</li><li>158</li><li>159</li><li>160</li><li>161</li><li>162</li><li>163</li><li>164</li><li>165</li><li>166</li><li>167</li><li>168</li><li>169</li><li>170</li><li>171</li><li>172</li><li>173</li><li>174</li><li>175</li><li>176</li><li>177</li><li>178</li><li>179</li><li>180</li><li>181</li><li>182</li><li>183</li><li>184</li><li>185</li><li>186</li><li>187</li><li>188</li><li>189</li><li>190</li><li>191</li><li>192</li><li>193</li><li>194</li><li>195</li><li>196</li><li>197</li><li>198</li><li>199</li><li>200</li><li>201</li><li>202</li><li>203</li><li>204</li><li>205</li><li>206</li><li>207</li><li>208</li><li>209</li><li>210</li><li>211</li><li>212</li><li>213</li><li>214</li><li>215</li><li>216</li><li>217</li><li>218</li><li>219</li><li>220</li><li>221</li><li>222</li><li>223</li><li>224</li><li>225</li><li>226</li><li>227</li><li>228</li><li>229</li><li>230</li><li>231</li><li>232</li><li>233</li><li>234</li><li>235</li><li>236</li><li>237</li><li>238</li><li>239</li><li>240</li><li>241</li><li>242</li><li>243</li><li>244</li><li>245</li><li>246</li><li>247</li><li>248</li><li>249</li><li>250</li><li>251</li></ul>

上面的操作代码就完毕了,这里主要对增删改的参数是数组和Map的情况进行了处理,对查询的结果进行了处理,代码比较简单也都有注释,这里就不做特别说明了。到这里一个数据库操作类就成型了。

3、操作类的继续完善

通过上面的过程已经可以使用了,那么先来看看使用,我们只需要继承操作抽象类告诉它具体的数据库信息以及建表语句。

<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestDBHelper</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">DataBaseHelper</span> {</span>

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> TestDBHelper mTestDBHelper;

    <span class="hljs-keyword">private</span> <span class="hljs-title">TestDBHelper</span>(Context context){
        <span class="hljs-keyword">super</span>(context);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> TestDBHelper <span class="hljs-title">getInstance</span>(Context context){
        <span class="hljs-keyword">if</span> (mTestDBHelper==<span class="hljs-keyword">null</span>){
            <span class="hljs-keyword">synchronized</span> (DataBaseHelper.class){
                <span class="hljs-keyword">if</span> (mTestDBHelper==<span class="hljs-keyword">null</span>){
                    mTestDBHelper = <span class="hljs-keyword">new</span> TestDBHelper(context);
                    <span class="hljs-keyword">if</span> (mTestDBHelper.getDB()==<span class="hljs-keyword">null</span>||!mTestDBHelper.getDB().isOpen()){
                        mTestDBHelper.open();
                    }
                }
            }
        }
        <span class="hljs-keyword">return</span> mTestDBHelper;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getMDbVersion</span>(Context context) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String <span class="hljs-title">getDbName</span>(Context context) {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"test.db"</span>;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String[] <span class="hljs-title">getDbCreateSql</span>(Context context) {
        String[] a = <span class="hljs-keyword">new</span> String[<span class="hljs-number">1</span>];
        a[<span class="hljs-number">0</span>] = <span class="hljs-string">"CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,gender TEXT,age INTEGER)"</span>;
        <span class="hljs-keyword">return</span> a;
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String[] <span class="hljs-title">getDbUpdateSql</span>(Context context) {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> String[<span class="hljs-number">0</span>];
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li></ul>

重写父类的抽象方法告诉它数据库信息以及建表语句,然后提供一个单例供外部获取,如果没有open就open数据库,接下来看看使用

4、使用

直接获取,然后传入你想操作的表信息,So Easy!

<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AppCompatActivity</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">View</span>.<span class="hljs-title">OnClickListener</span> {</span>

    <span class="hljs-keyword">private</span> Button selectBtn;
    <span class="hljs-keyword">private</span> Button insertBtn;
    <span class="hljs-keyword">private</span> Button updateBtn;
    <span class="hljs-keyword">private</span> Button deleteBtn;
    <span class="hljs-keyword">private</span> TextView contentTv;

    <span class="hljs-keyword">private</span> TestDBHelper testDBHelper;

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        testDBHelper = TestDBHelper.getInstance(getApplicationContext());

        selectBtn = (Button) findViewById(R.id.select_btn);
        insertBtn = (Button) findViewById(R.id.insert_btn);
        updateBtn = (Button) findViewById(R.id.update_btn);
        deleteBtn = (Button) findViewById(R.id.delete_bt);
        contentTv = (TextView) findViewById(R.id.content_tv);


        selectBtn.setOnClickListener(<span class="hljs-keyword">this</span>);
        insertBtn.setOnClickListener(<span class="hljs-keyword">this</span>);
        updateBtn.setOnClickListener(<span class="hljs-keyword">this</span>);
        deleteBtn.setOnClickListener(<span class="hljs-keyword">this</span>);
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onClick</span>(View v) {
        <span class="hljs-keyword">switch</span> (v.getId()){
            <span class="hljs-keyword">case</span> R.id.select_btn:
                List<Map> list = testDBHelper.queryListMap(<span class="hljs-string">"select * from user"</span>,<span class="hljs-keyword">null</span>);
                contentTv.setText(String.valueOf(list));
                <span class="hljs-keyword">break</span>;
            <span class="hljs-keyword">case</span> R.id.insert_btn:
                testDBHelper.insert(<span class="hljs-string">"user"</span>,<span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"name"</span>,<span class="hljs-string">"gender"</span>,<span class="hljs-string">"age"</span>},<span class="hljs-keyword">new</span> Object[]{<span class="hljs-string">"qiangyu"</span>,<span class="hljs-string">"male"</span>,<span class="hljs-number">23</span>});
                <span class="hljs-keyword">break</span>;
            <span class="hljs-keyword">case</span> R.id.update_btn:
                testDBHelper.update(<span class="hljs-string">"user"</span>,<span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"name"</span>,<span class="hljs-string">"gender"</span>,<span class="hljs-string">"age"</span>},<span class="hljs-keyword">new</span> Object[]{<span class="hljs-string">"yangqiangyu"</span>,<span class="hljs-string">"male"</span>,<span class="hljs-number">24</span>},
                        <span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"name"</span>},<span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"qiangyu"</span>});
                <span class="hljs-keyword">break</span>;
            <span class="hljs-keyword">case</span> R.id.delete_bt:
                testDBHelper.delete(<span class="hljs-string">"user"</span>,
                        <span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"name"</span>},<span class="hljs-keyword">new</span> String[]{<span class="hljs-string">"qiangyu"</span>});
                <span class="hljs-keyword">break</span>;
        }
    }
}</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li></ul>

很简单了,附一张演示图
gif制作了做了压缩,图的效果不好请见谅
这里写图片描述

是不是简单多了

yissan的博客,未经允许严禁转载 http://blog.csdn.net/yissan

5、最后的完善

在第3步里,我们的数据库信息,和建表语句都是写在具体的代码里的,这样我们每次修改都要动代码。Android推荐我们这些具体的信息都写在配置文件xml里面,那么我们就来做一下修改。

建立一个db.xml

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">resources</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">array</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"DATABASE_INFO"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">item</span>></span>test.db<span class="hljs-tag"></<span class="hljs-title">item</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">item</span>></span>1<span class="hljs-tag"></<span class="hljs-title">item</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">array</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">array</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"CREATE_TABLE_SQL"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">item</span>></span>CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,gender TEXT,age INTEGER)<span class="hljs-tag"></<span class="hljs-title">item</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">array</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">array</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"UPDATE_TABLE_SQL"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">item</span>></span><span class="hljs-tag"></<span class="hljs-title">item</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">array</span>></span>

<span class="hljs-tag"></<span class="hljs-title">resources</span>></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul>

现在的获取数据信息的代码是这样

<code class="hljs java has-numbering"> <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getMDbVersion</span>(Context context) {
        <span class="hljs-keyword">return</span> Integer.valueOf(context.getResources().getStringArray(R.array.DATABASE_INFO)[<span class="hljs-number">1</span>]);
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String <span class="hljs-title">getDbName</span>(Context context) {
        <span class="hljs-keyword">return</span> context.getResources().getStringArray(R.array.DATABASE_INFO)[<span class="hljs-number">0</span>];
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String[] <span class="hljs-title">getDbCreateSql</span>(Context context) {
        <span class="hljs-keyword">return</span> context.getResources().getStringArray(R.array.CREATE_TABLE_SQL);
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> String[] <span class="hljs-title">getDbUpdateSql</span>(Context context) {
        <span class="hljs-keyword">return</span> context.getResources().getStringArray(R.array.UPDATE_TABLE_SQL);
    }</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li></ul>

从配置文件当中获取数据库信息,这样以后每次修改只需要修改xml文件就可以了。

6、结语

到此,一个数据库操作类就完成啦,当然你可以根据自己的需要在其实添加更多的便捷操作方法。

这里提供的操作类,在使用的时候我们还在需要在Activity中写一些查询的sql代码,我们可以再搞一个统一做各种具体操作表的对象。

觉得不错别忘记点赞哟!

最后送给大家一个鸡汤,共勉

他每做一件小事的时候 他都像救命稻草一样抓着 有一天我一看 嚯 好家伙 他抱着的是已经是让我仰望的参天大树


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值