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

    xiaoxiao2024-04-19  9

    转自: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代码,我们可以再搞一个统一做各种具体操作表的对象。

    觉得不错别忘记点赞哟!

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

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

    转载请注明原文地址: https://ju.6miu.com/read-1288138.html
    最新回复(0)