Android數據庫SD卡創建,及圖片存、取操作

jopen 10年前發布 | 32K 次閱讀 Android Android開發 移動開發

Android數據庫中的創建,圖片的存、取操作如下:

數據庫類:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * 此類繼承了SQLiteOpenHelper抽象類,是一個輔助器類,需要 一個構造函數和重寫兩個方法。
 * 
 */
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "text.db"; // 數據庫名
    public static final int VERSION = 1; // 版本號
    public static final String TABLE_NAME = "text"; // 表名
    public static final String ID = "id";
    public static final String IMAGE = "image";

    public MySQLiteOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    /**
     * 在數據庫第一次生成的時候會調用這個方法,同時我們在這個方法里邊生成數據庫表
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 創建數據表的操作
        String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE + " blob not null );";

        db.execSQL(strSQL);
    }

    /**
     * 更新或者升級數據庫的時候會自動調用這個方法,一般我們會在這個方法中 刪除數據表,然后再創建新的數據表操作。
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.e("AndyDemo", "onUpgrade");
    }
}
Activity:

 private Button btn_newTable, btn_addOne, get_Image;
    private TextView tv;
    private ImageView showimage;
    private MySQLiteOpenHelper myOpenHelper;
    private SQLiteDatabase sqlitedb;
    private File path = new File("sdcard/text"); // 數據庫文件目錄
    private File f = new File("sdcard/text/text.db"); // 數據庫文件

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        init();

        // 實例化默認數據庫輔助操作對象
        myOpenHelper = new MySQLiteOpenHelper(this);

        // SD卡中創建數據庫文件
        if (!path.exists()) { // 判斷目錄是否存在
            path.mkdirs(); // 創建目錄
        }
        if (!f.exists()) { // 判斷文件是否存在
            try {
                f.createNewFile(); // 創建文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 初始化UI界面
     */
    private void init() {
        tv = (TextView) findViewById(R.id.tv_result);
        btn_newTable = (Button) findViewById(R.id.newTable);
        btn_addOne = (Button) findViewById(R.id.addOne);
        get_Image = (Button) findViewById(R.id.getimage);
        showimage = (ImageView) findViewById(R.id.showimage);
        btn_newTable.setOnClickListener(new ClickEvent());
        btn_addOne.setOnClickListener(new ClickEvent());
        get_Image.setOnClickListener(new ClickEvent());

    }

    class ClickEvent implements OnClickListener {
        @Override
        public void onClick(View v) {
            try {
                // SD卡中創建數據庫,實例化sqlitedb的操作如下
                sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);
                if (v == btn_newTable) { // 1.新建數據表
                    String TABLE_NAME = "text";
                    String ID = "id";
                    String IMAGE = "image";
                    String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
                            + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE
                            + " blob not null );";
                    sqlitedb.execSQL(str_sql2);
                    tv.setText("新建數據表成功!");

                } else if (v == btn_addOne) { // 2.插入一條記錄
                    ContentValues values = new ContentValues();
                    values.put(
                            MySQLiteOpenHelper.IMAGE,
                            drawableChange(getResources().getDrawable(
                                    R.drawable.ic_launcher)));
                    sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, values);
                    tv.setText("添加新數據成功!");
                } else if (v == get_Image) {
                    Cursor c = sqlitedb.rawQuery("select * from text", null);
                    c.moveToLast();

                    if (c.isLast()) {
                        byte[] blob = c.getBlob(c
                                .getColumnIndex(MySQLiteOpenHelper.IMAGE));
                        Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0,
                                blob.length);
                        showimage.setImageBitmap(bmp);
                    }
                    c.close();
                }
            } catch (Exception e) {
                tv.setText("操作失敗");
            } finally {
                sqlitedb.close();
            }
        }
    }

    /**
     * drawable轉化成字節數組
     * 
     * @param drawable
     * @return
     */
    private byte[] drawableChange(Drawable drawable) {

        Bitmap bm = ((BitmapDrawable) drawable).getBitmap();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] date = baos.toByteArray();
        return date;
    }

OK!!搞定! 最后別忘了加權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!