Android技術——資料庫(三):SQLite資料庫應用執行個體

來源:互聯網
上載者:User

標籤:android   sqlite   

本文的執行個體是基於《Android系統回顧(八):網路通訊(一)》中的項目添加而來的。 

實現的效果是:在PostActivity裡,當美女們載入完成之後,把她們的資訊非同步地寫入資料庫中。

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/IDBOperate.java檔案:

package com.example.meinvliulanqi.basic_service;
import android.database.sqlite.SQLiteDatabase;
public interface IDBOperate
{
    public boolean doOperate(SQLiteDatabase db);
    public void onDBOpreaterFinished(Boolean result);
}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/MeinvDbHelper.java檔案:

package com.example.meinvliulanqi.basic_service;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MeinvDbHelper extends SQLiteOpenHelper
{
    // 資料庫的基本參數
    public static final String  DB_NAME             = "meinvDB.db";
    // --------------------------------------------------------------
    // 資料表的基本描述,表名和表中的列名
    public static final String  DB_TABLE_MEINV_INFO = "tab_meinv_info";
    public static final String  KEY_ID              = "id";
    public static final String  KEY_HEAD_PATH       = "head_path";
    public static final String  KEY_NAME            = "name";
    public static final String  KEY_BIRTHDAY        = "birthday";
    public static final String  KEY_ADDRESS         = "address";
    public static final String  KEY_STATURE         = "stature";
    public static final String  KEY_WEIGHT          = "weight";
    public static final String  KEY_BUST            = "bust";
    public static final String  KEY_WAISTLINE       = "waistline";
    public static final String  KEY_HIP             = "hip";
    // --------------------------------------------------------------
    // 建立資料庫的SQL語句
    private static final String DATABASE_CREATE     = String.format(
                                                            "create table %s (%s integer primary key autoincrement, %s text not null, %s text not null, %s text not null, %s text not null, %s float not null, %s float not null, %s text not null, %s float not null, %s float not null)",
                                                            DB_TABLE_MEINV_INFO,
                                                            KEY_ID,
                                                            KEY_HEAD_PATH,
                                                            KEY_NAME,
                                                            KEY_BIRTHDAY,
                                                            KEY_ADDRESS,
                                                            KEY_STATURE,
                                                            KEY_WEIGHT,
                                                            KEY_BUST,
                                                            KEY_WAISTLINE,
                                                            KEY_HIP);
    // 定義建構函式
    public MeinvDbHelper(Context context, int version)
    {
        // SQLiteOpenHelper(Context context, String name, CursorFactory factory,
        // int version)
        // 第一個參數:建立資料庫的上下文,比如,如果傳入的是com.example.meinvliulanqi.ui.MainActivity的執行個體,那資料庫檔案在使用者手機中的實際儲存位置將是:/data/data/com.example.meinvliulanqi.ui/databases
        // 第二個參數:欲建立的資料庫的名稱,比如名稱是meinvDB.db,那麼在資料庫成功建立完成之後/data/data/com.example.meinvliulanqi.ui/databases路徑下就會有meinvDB.db、meinvDB.db-journal兩個檔案,一個是資料庫檔案,另一個是記錄檔
        // 第三、第四個參數:CursorFactory用於產生Cursor對象,version為建立資料庫的版本
        super(context, DB_NAME, null, version);
    }
    // 重寫onCreate函數,當磁碟上不存在資料庫時負責建立新資料庫
    @Override
    public void onCreate(SQLiteDatabase arg0)
    {
        arg0.execSQL(DATABASE_CREATE);
    }
    // 重寫onUpgrade函數,當存在資料庫版本不一致時,升級磁碟上的資料庫到目前的版本,覆蓋安裝後可能會出現這種情況
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2)
    {
        arg0.execSQL("DROP TABLE IF EXIST " + DB_TABLE_MEINV_INFO);
        onCreate(arg0);
    }
}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/basic_service/Task_operate_db.java檔案:

package com.example.meinvliulanqi.basic_service;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.util.Log;
public class Task_operate_db extends AsyncTask<Void, Integer, Boolean>
{
    private Context    context;
    private int        db_version;
    private IDBOperate operate;
    public Task_operate_db(Context _con, int _ver, IDBOperate _ope)
    {
        context = _con;
        db_version = _ver;
        operate = _ope;
    }
    @Override
    protected Boolean doInBackground(Void... para)
    {
        MeinvDbHelper helper = new MeinvDbHelper(context, db_version);
        SQLiteDatabase db = null;
        try
        {
            db = helper.getWritableDatabase();
            return operate.doOperate(db);
        } catch (Exception e)
        {
            Log.e("thinking-------", e.getMessage());
            return false;
        }
    }
    @Override
    protected void onProgressUpdate(Integer... values)
    {
    }
    @Override
    protected void onPostExecute(Boolean result)
    {
        this.operate.onDBOpreaterFinished(result);
    }
}

/MeiNvLiuLanQi/src/com/example/meinvliulanqi/ui/PostActivity.java檔案:

package com.example.meinvliulanqi.ui;
import org.json.JSONArray;
import org.json.JSONException;
import com.example.meinvliulanqi.basic_service.IDBOperate;
import com.example.meinvliulanqi.basic_service.IGetdata;
import com.example.meinvliulanqi.basic_service.MeinvDbHelper;
import com.example.meinvliulanqi.basic_service.Task_getimgs;
import com.example.meinvliulanqi.basic_service.Task_operate_db;
import com.example.meinvliulanqi.basic_service.Task_postdata;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.widget.GridView;
public class PostActivity extends Activity implements IGetdata, IDBOperate
{
    private MeinvBaseAdapter ada;
    private GridView         gid_meinv;
    private JSONArray        meinvs;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post);
        Task_postdata task = new Task_postdata(this);
        task.execute(new String[] {
                "http://192.168.10.111:8011/MeinvInfo.ashx",
                "{\"method\":\"get_meinv\",\"check_num\":1001}" });
    }
    @Override
    public void onGetInfoData(String info)
    {
        try
        {
            meinvs = new JSONArray(info);
            initUIInfo();
        } catch (JSONException e)
        {
            Log.e("thinking-------", e.getMessage());
        }
    }
    private void initUIInfo()
    {
        gid_meinv = (GridView) findViewById(R.id.gid_meinv_post);
        ada = new MeinvBaseAdapter(meinvs, new Bitmap[meinvs.length()], this);
        gid_meinv.setAdapter(ada);
        String[][] img_infos = new String[meinvs.length()][2];
        for (int i = 0; i < img_infos.length; i++)
        {
            try
            {
                img_infos[i][0] = meinvs.getJSONObject(i)
                        .getString("photoPath");
            } catch (JSONException e)
            {
                img_infos[i][0] = "";
                Log.e("thinking-------", e.getMessage());
            }
            img_infos[i][1] = i + "";
        }
        Task_getimgs task = new Task_getimgs(this);
        task.execute(img_infos);
        Task_operate_db task_db = new Task_operate_db(this, 1, this);
        task_db.execute();
    }
    @Override
    public void onGetImgData(Bitmap[] img)
    {
        ada.setImgs(img);
    }
    @Override
    public boolean doOperate(SQLiteDatabase db)
    {
        try
        {
            ContentValues newValues = new ContentValues();
            for (int i = 0; i < meinvs.length(); i++)
            {
                newValues.put(MeinvDbHelper.KEY_NAME, meinvs.getJSONObject(i)
                        .getString("name"));
                newValues.put(MeinvDbHelper.KEY_ADDRESS, meinvs
                        .getJSONObject(i).getString("address"));
                newValues.put(MeinvDbHelper.KEY_HEAD_PATH,
                        "/sdcard/meinvliulanqi/" + i + ".jpg");
                newValues.put(MeinvDbHelper.KEY_BUST, meinvs.getJSONObject(i)
                        .getString("bust"));
                newValues.put(MeinvDbHelper.KEY_HIP, meinvs.getJSONObject(i)
                        .getDouble("hip"));
                newValues.put(MeinvDbHelper.KEY_BIRTHDAY,
                        meinvs.getJSONObject(i).getString("birthday"));
                newValues.put(MeinvDbHelper.KEY_STATURE, meinvs
                        .getJSONObject(i).getDouble("stature"));
                newValues.put(MeinvDbHelper.KEY_WEIGHT, meinvs.getJSONObject(i)
                        .getDouble("weight"));
                newValues.put(MeinvDbHelper.KEY_WAISTLINE, meinvs
                        .getJSONObject(i).getDouble("waistline"));
                db.insert(MeinvDbHelper.DB_TABLE_MEINV_INFO, null, newValues);
            }
            return true;
        } catch (Exception e)
        {
            Log.e("thinking-------", e.getMessage());
            return false;
        }
    }
    @Override
    public void onDBOpreaterFinished(Boolean result)
    {
        // TODO Auto-generated method stub
    }
}

實現的效果:

當頁面載入完畢之後,adb在/data/data/com.example.meinvliulanqi.ui/databases路徑下可以看到:


把這個meinvDB.db檔案拷出來,用Sqlite3工具查看可以看到:


結果表明資料已經寫入資料庫了。

Android技術——資料庫(三):SQLite資料庫應用執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.