Android數據庫SQLite

數據庫

數據庫增刪改查

添加android

insert into info (name,phone) values ('zhangsan','110')sql

刪除數據庫

delete from info where name='zhangsan'設計模式

修改安全

update info set phone ='999' where name ='zhangsan'mvc

查詢ide

select * from info where name='zhangsan'工具

Android下數據庫增刪改查

  • void - db.execSQL() 增刪改
  • cursor - db.rawQuery() 查詢

注意:操做數據庫 必定要記得把數據庫**鏈接**給關閉掉。 cursor 用完後,也記得關閉佈局

getReadableDatabase() getWriteableDatabase()返回的是同一個數據庫的實例, 區別就是數據庫返回的時候是否加鎖。ui

利用sqlite3工具查看數據庫的內容

sqlite3 xxx.db

若是出現中文亂碼 須要修改cmd的編碼集

65001 utf-8

chcp 65001 更改cmd窗口的編碼,默認是gb2312

Android下建立數據庫步驟

  1. 類繼承SQLiteOpenHelper(數據建立的幫助類,oncreate,onUpgrade)

生成構造方法

/**
     * 建立一個數據庫幫助類,去建立/打開/管理 數據庫
     * @param context   上下文
     * @param name  設置數據庫名稱
     * @param factory   CursorFactory 定義一個結果集,遊標工廠。
     *                      Cursor 遊標(結果集,保存了對數據庫的引用,指針)
     *                      設置爲null,表示調用默認遊標        
     * @param version   數據庫的版本,從1開始
     */
    public MySqliteDB(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
  1. 重寫onCreate(SQLiteDatabase db)方法 ,數據庫第一次被建立的時候調用的方法。適合數據庫表結構的初始化.

    create table info (_id integer primary key autoincrement, name varchar(20), phone varchar(20))

  2. 重寫onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),數據庫被更新的時候調用的方法.數據庫的版本號增長的時候調用。

  3. 添加helper類的構造方法。 指定數據庫的名稱,版本號,遊標工廠默認null

數據庫文件建立的位置

/data/data/包名/databases/xxx.db

數據庫在建立的時候不指定裏面的內容,默認建立只有一張表 metadata保存系統語言環境。

Cursor 遊標

  • 保存了對數據庫的引用,指針。設置爲null,表示調用默認遊標。
  • 默認起始位置爲-1
  • 經常使用方法:

    boolean move(int offset) 
    
          Move the cursor by a relative amount, forward or backward, from the current position. 
    
     boolean moveToFirst() 
    
          Move the cursor to the first row. 
    
     boolean moveToLast() 
    
          Move the cursor to the last row. 
    
     boolean moveToNext() 
    
          Move the cursor to the next row. 
    
     boolean moveToPosition(int position) 
    
          Move the cursor to an absolute position. 
    
     boolean moveToPrevious() 
    
          Move the cursor to the previous row.

如何防止SQL語句注入

方法:綁定參數

//示例
xx.exeSQL("insert into person(name,age) values (?,?)",new Object[]{name,age})

sqlite3的命令

  • sqlite3 <數據庫名> 查看數據庫,進入sqlite模式
  • .tables 查看全部表
  • .mode column | list | insert | line | tabs | tcl | csv 改變輸出格式
  • .schema 查看庫中全部表的DDL語句
  • .headers on/off 顯示錶頭 默認off
  • .nullValueNULL 空值數據顯示問題
  • .dump<表名> 生成造成表的SQL腳本
  • .dump 生成整個數據庫的SQL腳本
  • .exit 退出
  • .help 查看幫助

(重點)類 SQLiteDatabase(API實現數據庫的正刪改查)

插入數據

long insert(String table, String nullColumnHack, ContentValues values) 

          Convenience method for inserting a row into the database.

刪除數據

int delete(String table, String whereClause, String[] whereArgs) 

          Convenience method for deleting rows in the database.

修改數據

int update(String table, ContentValues values, String whereClause, String[] whereArgs) 

          Convenience method for updating rows in the database.

查詢數據

Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 

          Query the given URL, returning a Cursor over the result set. 

 Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 

          Query the given table, returning a Cursor over the result set. 

 Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 

          Query the given table, returning a Cursor over the result set.

兩種增刪改查方法的優缺點

  • 本身寫sql語句
    • 自由度高,靈活
    • 效率高,資源佔用小
    • 能夠實現表的級聯查詢
  • google的現成API
    • 方便,不易出錯
    • 資源開銷比較大,效率稍低
      • 有返回值

(重點)數據庫的事務

優勢:安全,高效

保證操做要麼同時成功,要麼同時失敗。 銀行轉帳

A->B 匯款 A - 100塊 B + 100塊

事務的模板代碼

//開啓事務
      db.beginTransaction();
       try {
         ...
         處理業務邏輯A
         ...
         //設置成功(回滾)點,即要麼全成功要麼全失敗
         db.setTransactionSuccessful();
         ...
         處理業務邏輯B
         ...
         //設置成功(回滾)點。(同時操做若干個動做時能夠設置多個成功點)
         db.setTransactionSuccessful();
         ...
       } finally {
        //結束事務
         db.endTransaction();
        //千萬不要忘記幹掉這個
        db.close();
       }

(重點)數據庫的內容同步顯示到界面(ListView)。

listview工做的原理

mvc 設計模式。 * model 數據模型 Person * view 視圖 ListView * controller 控制器 Adapter 數據適配器,將數據集合以特定的方式組織到界面上

本身理解: ListView + Adapter機制,在須要的時候去建立TextView對象 根據當前屏幕可顯示的條數去建立對象,顯示過去(以前在屏幕中出現,而後又消失的條目)的條目對象會被從新賦予新值(即顯示出的新的條目)

Listview 使用步驟

  • 寫ui界面 xml文件 ListView
  • 尋找listview
  • 實現listview的數據適配器 adapter
  • 給listview設置adapter,一旦設置了adapter,就會從這個方法索要View

開發的時候如何自定義數據適配器,實現複雜的ui界面。

  • 定義listview佈局
  • 查找listview
  • 自定義一個複雜BaseAdapter
    • getCount();返回有多少個條目 List.SIZE()
    • getView();返回每一個條目的view對象

      定義一個xml文件 View view = View.inflate(MainActivity.this, R.layout.rl_item, null); 修改view對象裏面子孩子顯示的內容 view.findViewById();

  • 給listview設置adapter

(重點)打氣筒——LayoutInflater

如何將XML數據(佈局文件)轉換成View對象? 將一個XML的佈局文件填充成一個View對象,以便添加到其餘 View容器中。

SimpleAdapter —— 顯示圖片文本信息 ArrayAdapter —— 只能顯示圖片

Android對話框

Builder

  • 通知對話框

  • 列表對話框

  • 單選對話框

  • 多選對話框

ProgressDialog * 進度對話框


整理補充:

內容提供者

數據庫文件 通常是私有的。 -rw-rw- --- 別的應用程序是沒辦法訪問私有的數據庫。

目的: 保證應用程序數據的安全。每一個應用程序都是獨立的,不能夠操做另一個應用程序數據庫的數據。

有一些特殊的需求,須要把本身私有的數據庫暴露給別的應用程序讓別的應用程序訪問。

內容提供者就是作這個事情的。

內容提供者建立的步驟 (理解原理

  • DaYifuProvider extend ContentProvider
  • 在清單文件.xml裏面配置 內容提供者。配置完整類路徑,主機名。 android:name="com.itheima.db.DaYifuProvider" android:authorities="com.itheima.db.persondb"
  • DaYifuProvider 定義出來一些數據操做的uri 利用uriMatcher 指定一些特殊的路徑 content://com.itheima.db.persondb/query 查詢 content://com.itheima.db.persondb/insert 添加 content://com.itheima.db.persondb/delete 刪除 content://com.itheima.db.persondb/update 更新
  • 實現DaYifuProvider 增刪改查的方法。 根據業務需求去實現。 實現了query方法, 1.檢查路徑uri是否正確。 2.若是正確返回cursor 3.若是不正確拋出異常。

如何使用內容提供者查詢數據

  1. 獲取內容提供者的解析器 ContentResolver resolver = getContentResolver();
  2. 使用resolver進行增刪改查的操做。
相關文章
相關標籤/搜索