玩转Android sqlLite---(附android DB的图行工具)

jopen 13年前
     <p>sqlLite就像个迷你数据库,配套的操作工具还不完善,操作起来不直观。不像oracle、mysql那样有图形化的操作工作。</p>    <p> </p>    <p>偶然在网上发现一款操作sqlLite的图形化工具  ----  SQLiteSpy(后附上链接)。如下图:</p>    <p><img style="width:675px;height:216px;" alt="玩转Android sqlLite---(附android DB的图行工具) " src="https://simg.open-open.com/show/6d2c11d0fff0988b1e66daebff2c1159.png" /></p>    <p> </p>    <p> 怎么样!嘿嘿,虽然功能还显简单,但对开发者来说,起码说看到比较直观的界面。</p>    <p> </p>    <p>操作步骤很简单,首先导入sqlLite 的DB文件(即File Explorer   /data /data/   ),然后进行各种sql操作。</p>    <p> </p>    <p>顺便写一下,我常用到的sqlLite操作类,对增删查改进行了简单的封装。</p>    <pre class="brush:java; toolbar: true; auto-links: false;">import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;  public class DBHelper {  static private DatabaseHelper mDbHelper;  static private SQLiteDatabase mDb;   private static final String DATABASE_NAME = "zhyy.db";    private static final int DATABASE_VERSION = 1;   private final Context mCtx;   private static class DatabaseHelper extends SQLiteOpenHelper {    DatabaseHelper(Context context) {    super(context, DATABASE_NAME, null, DATABASE_VERSION);   }    @Override   public void onCreate(SQLiteDatabase db) {       }   @Override   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {       }  }   public DBHelper(Context ctx) {   this.mCtx = ctx;  }   public DBHelper open() throws SQLException {   mDbHelper = new DatabaseHelper(mCtx);   mDb = mDbHelper.getWritableDatabase();   return this;  }   public void closeclose() {      mDb.close();   mDbHelper.close();  }   /**   * 插入数据   * 参数:tableName 表名   * initialValues 要插入的列对应值   *   */  public long insert(String tableName,ContentValues initialValues) {      return mDb.insert(tableName, null, initialValues);  }     /**   * 删除数据   * 参数:tableName 表名   * deleteCondition 删除的条件   * deleteArgs 如果deleteCondition中有“?”号,将用此数组中的值替换   *   */  public boolean delete(String tableName,String deleteCondition,String[] deleteArgs) {      return mDb.delete(tableName, deleteCondition, deleteArgs) > 0;  }      /**   * 更新数据   * 参数:tableName 表名   * initialValues 要更新的列   * selection 更新的条件   * selectArgs 如果selection中有“?”号,将用此数组中的值替换   *   */  public boolean update(String tableName,ContentValues initialValues,String selection,String[] selectArgs) {   int returnValue = mDb.update(tableName, initialValues, selection, selectArgs);      return  returnValue > 0;   }   /**   * 取得一个列表   * 参数:tableName 表名   * columns 返回的列   * selection 查询条件   * selectArgs 如果selection中有“?”号,将用此数组中的值替换   *   */  public Cursor findList(String tableName,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) {    return mDb.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy);  }   /**   * 取得单行记录   * 参数:tableName 表名   * columns 返回的列   * selection 查询条件   * selectArgs 如果selection中有“?”号,将用此数组中的值替换   *   */  public Cursor findInfo(String tableName,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit,boolean distinct) throws SQLException {    Cursor mCursor = mDb.query(distinct, tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);         if (mCursor != null) {    mCursor.moveToFirst();   }   return mCursor;   }   /**   * 执行sql   * 参数:sql 要执行的sql      *   */  public void execSQL(String sql){   mDb.execSQL(sql);     }    /**      * 判断某张表是否存在      * @param tabName 表名      * @return      */  public boolean isTableExist(String tableName){             boolean result = false;             if(tableName == null){                     return false;             }                         try {              Cursor cursor = null;                     String sql = "select count(1) as c from sqlite_master where type ='table' and name ='"+tableName.trim()+"' ";                     cursor = mDb.rawQuery(sql, null);                     if(cursor.moveToNext()){                             int count = cursor.getInt(0);                             if(count>0){                                     result = true;                             }                     }                                                               cursor.close();             } catch (Exception e) {                     // TODO: handle exception             }                             return result;     }           /**       * 判断某张表中是否存在某字段(注,该方法无法判断表是否存在,因此应与isTableExist一起使用)       *        * @param tabName 表名       * @return       */     public boolean isColumnExist(String tableName,String columnName){              boolean result = false;              if(tableName == null){                      return false;              }                                       try {               Cursor cursor = null;                      String sql = "select count(1) as c from sqlite_master where type ='table' and name ='"+tableName.trim()+"' and sql like '%"+ columnName.trim() +"%'" ;                      cursor = mDb.rawQuery(sql, null);                      if(cursor.moveToNext()){                              int count = cursor.getInt(0);                              if(count>0){                                      result = true;                              }                      }                                                                  cursor.close();              } catch (Exception e) {                      // TODO: handle exception              }                              return result;      }                       }</pre>好吧,也顺便写一下各种增删查改的sql。    <pre class="brush:java; toolbar: true; auto-links: false;">package com.android.mission.test;  import com.android.mission.util.DBHelper;  import android.content.ContentValues; import android.database.Cursor; import android.test.AndroidTestCase; import android.util.Log; /**  * 单元测试操作sqlLite的各种sql  */ public class testSqlLite extends AndroidTestCase{    /**   * 创建表   * @throws Exception   */  public void createTable() throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();      String deleteSql = "drop table if exists user ";      dbHelper.execSQL(deleteSql);       //id是自动增长的主键,username和 password为字段名, text为字段的类型   String sql = "CREATE TABLE user (id integer primary key autoincrement, username text, password text)";     dbHelper.execSQL(sql);   dbHelper.closeclose();  }    /**   * 插入数据   * @throws Exception   */  public void insert() throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();      ContentValues values =  new ContentValues();  //相当于map      values.put("username", "test");   values.put("password", "123456");    dbHelper.insert("user", values);      dbHelper.closeclose();  }    /**   * 更新数据   * @throws Exception   */  public void update() throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();   ContentValues initialValues = new ContentValues();   initialValues.put("username", "changename");  //更新的字段和值   dbHelper.update("user", initialValues, "id = '1'", null);   //第三个参数为 条件语句      dbHelper.closeclose();  }      /**   * 删除数据   * @throws Exception   */  public void delete() throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();      String testId = "1";   dbHelper.delete("user", "id = '"+ testId +"'", null);      dbHelper.closeclose();  }      /**   * 增加字段   * @throws Exception   */  public void addColumn() throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();      String updateSql = "alter table user add company text";   dbHelper.execSQL(updateSql);  }    /**   * 查询列表   * @throws Exception   */  public void selectList()throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();   Cursor returnCursor = dbHelper.findList("user",new String[] {"id","username", "password"}, "username = 'test'", null,null, null, "id desc");   while(returnCursor.moveToNext()){    String id = returnCursor.getString(returnCursor.getColumnIndexOrThrow("id"));    String username = returnCursor.getString(returnCursor.getColumnIndexOrThrow("username"));    String password = returnCursor.getString(returnCursor.getColumnIndexOrThrow("password"));   }  }    /**   * 某条信息   * @throws Exception   */  public void selectInfo()throws Exception{   DBHelper dbHelper = new DBHelper(this.getContext());   dbHelper.open();   Cursor returnCursor = dbHelper.findList("user",new String[] {"id","username", "password"}, "id = '1'", null,null, null, "id desc");   if (returnCursor.getCount() > 0) {    returnCursor.moveToFirst();    String id = returnCursor.getString(returnCursor.getColumnIndexOrThrow("id"));    String username = returnCursor.getString(returnCursor.getColumnIndexOrThrow("username"));    String password = returnCursor.getString(returnCursor.getColumnIndexOrThrow("password"));   }  } }</pre>    <p></p>