android之SQLite在下載管理中的使用

來源:互聯網
上載者:User

由於項目需要一個下載管理模組,最近一直研究檔案下載的實現,經過不斷的努力終於搞定了!檔案下載管理中我們要對檔案的資訊進行儲存,包括檔案的大小,檔案名稱,類型等。這時我們就要用到資料庫了,android系統為我們提供了輕量級的資料庫SQLite。對於SQLite的使用我們可以參考mars的相關視頻!下面是我在項目中的執行個體,供大家參考。
首先定義一個DBHelper繼承SQLiteOpenHelper:
[java]
package com.cloay.down.db; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
/**
 * 儲存下載檔案資訊的DBHelper
 * DBHelper.java
 * @author cloay
 * 2011-11-18
 */ 
 
public class DBHelper extends SQLiteOpenHelper { 
    // download.db-->資料庫名 
    public DBHelper(Context context) { 
        super(context, "download.db", null, 1); 
    } 
 
    /**
     * 在download.db資料庫下建立一個download_info表格儲存體下載資訊
     * state 定義四種下載的狀態:初始化狀態1,正在下載狀態2,暫停狀態3,下載完成4
     */ 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
        db.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, url char, " 
                + "file_size integer, compelete_size integer, state integer)"); 
    } 
 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
 
    } 
 

然後定義一個DBHelperUtil實現一些常見對資料庫的操作功能:
[java]
package com.cloay.down.utils; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import com.cloay.down.db.DBHelper; 
import com.cloay.down.entity.FileInfo; 
 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
/**
 * 資料庫工具類,實現資料庫的尋找,刪除,更新等功能
 * DBHelperUtil.java
 * @author cloay
 * 2011-11-18
 */ 
public class DBHelperUtil { 
    private DBHelper dbHelper; 
 
    public DBHelperUtil(Context context) { 
        dbHelper = new DBHelper(context); 
         
    } 
 
    /**
     * 查看資料庫中是否有資料
     * @param urlstr
     *          下載連結
     * @return
     */ 
    public boolean isHasInfors(String urlstr) { 
        SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        String sql = "select count(*)  from download_info where url=?"; 
        Cursor cursor = database.rawQuery(sql, new String[] { urlstr }); 
        cursor.moveToFirst(); 
        int count = cursor.getInt(0); 
        cursor.close(); 
        closeDb(); 
        if(count == 0){ 
            return true; 
        } 
        else{ 
            return false; 
        } 
    } 
 
    /**
     * 擷取資料庫中的資料數www.2cto.com
     */ 
    public int getLoadInfoCount(){ 
        int i = 0; 
        SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        String sql = "select count(*)  from download_info"; 
        Cursor cursor = database.rawQuery(sql, new String[] {}); 
        while(cursor.moveToNext()){ 
            i++; 
        } 
        closeDb(); 
        return i; 
    } 
     
    /**
     * 查詢資料庫中所有資料
     */ 
    public List<FileInfo> getLoadInfos (){ 
        List<FileInfo> fileInfos = new ArrayList<FileInfo>(); 
        SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        String sql = "select url,file_size,compelete_size,state from download_info"; 
        Cursor cursor = database.rawQuery(sql, new String[] {}); 
        while (cursor.moveToNext()) { 
            FileInfo info = new FileInfo(cursor.getString(0), cursor.getInt(1), cursor.getInt(2), cursor.getInt(3)); 
            fileInfos.add(info); 
        } 
        cursor.close(); 
        closeDb(); 
        return fileInfos; 
    } 
     
    /**
     * 儲存 下載的具體資訊
     * @param info
     *          下載檔案資訊
     */ 
    public void saveInfos(FileInfo info) { 
        SQLiteDatabase database = dbHelper.getWritableDatabase(); 
        String sql = "insert into download_info(file_size, compelete_size, url, state) values (?,?,?,?)"; 
        Object[] bindArgs = {info.getFileSize(), info.getCompleteSize(), info.getUrlstring(), info.getState()}; 
        database.execSQL(sql, bindArgs); 
    } 
 
    /**
     *  得到下載具體資訊
     * @param urlstr
     *          下載連結url
     * @return
     */ 
    public FileInfo getInfo(String urlstr) { 
        FileInfo info = null; 
        SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        String sql = "select file_size,compelete_size,url,state from download_info where url=?"; 
        Cursor cursor = database.rawQuery(sql, new String[] { urlstr }); 
        while (cursor.moveToNext()) { 
            info = new FileInfo(cursor.getString(2), cursor.getInt(0), cursor.getInt(1), cursor.getInt(3)); 
        } 
        cursor.close(); 
        closeDb(); 
        return info; 
    } 
 
    /**
    * 更新資料庫中的下載資訊
     */ 
    public void updataInfos(int compeleteSize, int state, String urlstr) { 
        SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        String sql = "update download_info set compelete_size=?,state=? where url=?"; 
        Object[] bindArgs = { compeleteSize, state, urlstr }; 
        database.execSQL(sql, bindArgs); 
    } 
    /**
     * 關閉資料庫
     */ 
    public void closeDb() { 
        dbHelper.close(); 
   } 
 
    /**
    * 下載完成後刪除資料庫中的資料
     */ 
    public void delete(String url) { 
       SQLiteDatabase database = dbHelper.getReadableDatabase(); 
        database.delete("download_info", "url=?", new String[] { url }); 
    } 

通過對資料庫的操作我們就可以儲存檔案當前的相關資訊,進而實現我們對檔案下載的管理功能。
有問題請留言,大家一起交流學習!
 

摘自  Cloay的專欄 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.