package com.example.myapplication.db; import android.content.ContentValues; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.os.Environment; import android.util.Log; import com.example.myapplication.R; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class MySQLiteOpenHelper extends SQLiteOpenHelper { private static final String DBname="uavshop.db"; //像控點數據庫 private static final int version=1; private String tag="MySQLDBHelper"; private Context mycontext; String IMAGE = "file_data"; //blob字段名稱 String TB_NAME = "kzdphoto";//含blob表名 public MySQLiteOpenHelper(Context context) { super(context, DBname, null, version); mycontext = context; Log.i(tag, "測試"); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.i(tag, "uavshop數據庫中kzdphoto創建前"); String sqlString="create table kzdphoto (id integer primary key autoincrement,file_name nvarchar(255),file_data blob,file_size int,file_type int,xkd_id int,upload_man nvarchar(32),upload_date nvarchar(64),crc int,desc nvarchar(255))"; db.execSQL(sqlString); Log.i(tag, "uavshop數據庫中kzdphoto創建成功"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub Log.i(tag, "更新數據庫,暫時不需要使用"); } //--------------------------------------------------------------------------------------- public void Test() //測試函數 ,將cw_30.png圖片文件插入數據表中 { try { //從資源中獲取Bitmap對象 Resources res = mycontext.getResources(); Bitmap mybmp = BitmapFactory.decodeResource(res,R.drawable.cw_30); //轉換為Byte數組 ByteArrayOutputStream os = new ByteArrayOutputStream(); mybmp.compress(Bitmap.CompressFormat.PNG, 100, os); byte[] img = os.toByteArray(); //插入數據庫 insert(img); } catch (Exception ex) { ex.printStackTrace(); } } //------------------------------------------------------------------------------------------ public byte[] img(int id)//把圖片轉換成字節 { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap bitmap = ((BitmapDrawable) mycontext.getResources().getDrawable(id,null)).getBitmap(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } //------------------------------------------------------------------------------------------ //將圖片一字節形式存儲數據庫讀取操作 public long insert(byte[] img) { String desc = "文件大小為:"+Integer.toString(img.length)+"字節"; try { SQLiteDatabase db = getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("file_name","PG001.jpg"); cv.put(IMAGE, img); cv.put("file_size",img.length); cv.put("file_type",1); cv.put("xkd_id",0); cv.put("upload_man","陳光榮"); cv.put("upload_date","2021-03-05 15:10:20"); cv.put("crc",25); cv.put("desc",desc); long result = db.insert(TB_NAME, null, cv); return result; } catch(Exception ex) { ex.printStackTrace(); return -1; } } //-----------------------讀取blob字段轉為圖片----------------------------------- public Bitmap getBmp(int position) { SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TB_NAME,null,null,null,null,null,null); cursor.moveToPosition(position); byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE)); Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length); return bmpout; } //------------------將Bitmap對象另存為圖片文件------------------------------------------------------------------------ public void saveBitmap(String name, Bitmap bm) { Log.d("Save Bitmap", "Ready to save picture"); //指定我們想要存儲文件的地址 String TargetPath = ""; File dataFilepath = Environment.getExternalStorageDirectory(); TargetPath = dataFilepath.getPath()+"/Pictures/"; Log.d("Save Bitmap", "Save Path=" + TargetPath); //判斷指定文件夾的路徑是否存在 if (!isExist(TargetPath)) { Log.d("Save Bitmap", "TargetPath isn't exist"); } else { //如果指定文件夾創建成功,那么我們則需要進行圖片存儲操作 File saveFile = new File(TargetPath, name); try { FileOutputStream saveImgOut = new FileOutputStream(saveFile); // compress - 壓縮的意思 bm.compress(Bitmap.CompressFormat.PNG, 80, saveImgOut); //存儲完成后需要清除相關的進程 saveImgOut.flush(); saveImgOut.close(); Log.d("Save Bitmap", "The picture is save to your phone!"); } catch (IOException ex) { ex.printStackTrace(); } } } //---------------------------判斷文件夾是否存在------------------------------------------------------ static public boolean isExist(String path) { File file = new File(path); return file.exists(); } // ------------------------------------------------------------------------------------------------- }