2016-06-22 16 views
2

私は、データがsqliteからフェッチされるアンドロイドアプリケーションに取り組んでいます。ここでは、文字列値を挿入して取り出すことができましたが、今はイメージを挿入して取得したいのですか?誰でも私にこれを手伝うことができますか?sqliteデータベースからイメージを挿入および取得する方法は?

これは、DB、列を作成してデータを挿入する私のDBAdapterクラスです。

public class DBAdapter { 

    public static final String KEY_ROWID = "_id"; 
    public static final String Product = "product"; 
    public static final String Price = "price"; 
    public static final String InStock = "instock"; 
    public static final String OutOfStock = "outofstock"; 
    //public static final String imgs = "img"; 
    private static final String TAG = "CountriesDbAdapter"; 
    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 

    private static final String DATABASE_NAME = "World"; 
    private static final String SQLITE_TABLE = "Country"; 
    private static final int DATABASE_VERSION = 1; 

    private final Context mCtx; 

    private static final String DATABASE_CREATE = 
      "CREATE TABLE if not exists " + SQLITE_TABLE + " (" + 
        KEY_ROWID + " integer PRIMARY KEY autoincrement," + 
        Product + "," + 
        Price + "," + 
        InStock + "," + 
        OutOfStock + "," + 
        " UNIQUE (" + Product +"));"; 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 


     @Override 
     public void onCreate(SQLiteDatabase db) { 
      Log.w(TAG, DATABASE_CREATE); 
      db.execSQL(DATABASE_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE); 
      onCreate(db); 
     } 
    } 

    public DBAdapter(Context ctx) { 
     this.mCtx = ctx; 
    } 

    public DBAdapter open() throws SQLException { 
     mDbHelper = new DatabaseHelper(mCtx); 
     mDb = mDbHelper.getWritableDatabase(); 
     return this; 

    } 

    public void close() { 
     if (mDbHelper != null) { 
      mDbHelper.close(); 
     } 
    } 

    public long createCountry(String product, String price, 
           String instock, String outofstock) { 

     ContentValues initialValues = new ContentValues(); 
     initialValues.put(Product, product); 
     initialValues.put(Price, price); 
     initialValues.put(InStock, instock); 
     initialValues.put(OutOfStock, outofstock); 
//  initialValues.put(imgs,img); 
     return mDb.insert(SQLITE_TABLE, null, initialValues); 
    } 

    public boolean deleteAllCountries() { 

     int doneDelete = 0; 
     doneDelete = mDb.delete(SQLITE_TABLE, null , null); 
     Log.w(TAG, Integer.toString(doneDelete)); 
     return doneDelete > 0; 

    } 

    /* public Cursor fetchCountriesByName(String inputText) throws SQLException { 
     Log.w(TAG, inputText); 
     Cursor mCursor = null; 
     if (inputText == null || inputText.length() == 0) { 
      mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, 
          Product, Price, InStock, OutOfStock}, 
        null, null, null, null, null); 

     } 
     else { 
      mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID, 
          Product, Price, InStock, OutOfStock}, 
        Product + " like '%" + inputText + "%'", null, 
        null, null, null, null); 
     } 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 

    }*/ 

    public Cursor fetchAllCountries() { 

     Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, 
         Product, Price, InStock, OutOfStock}, 
       null, null, null, null, null); 

     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

    public void insertSomeCountries() { 

     createCountry("NOKIA X201","10,000","InStock","OutOfStock"); 
     createCountry("SAMSUNG Galaxy Note","30,000","OutOfStock","InStock"); 
     createCountry("IPHONE 6S+","65,000","InStock","OutOfStock"); 
     createCountry("MOTO G2","12,999","InStock","OutOfStock"); 
     createCountry("IBALL ANDY", "11,000", "OutOfStock", "InStock"); 
     createCountry("MOTO G4", "13,999", "InStock", "OutOfStock"); 
     createCountry("SONY XPERIA", "8,000", "OutOfStock", "InStock"); 

    } 

} 

答えて

0

画像

byte[] image = cursor.getBlob(1); 
0123を取得するには、データベース内の byte array

public void addImage(String name, byte[] image) throws SQLiteException{ 
    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, name); 
    cv.put(KEY_IMAGE, image); 
    database.insert(DB_TABLE, null, cv); 
} 

として挿入image

、これを試してみてください

注:

  1. データベースに挿入する前に、あなたのビットマップ画像は、まずデータベースクエリを使用して、それを適用するバイト配列に変換する必要があります。

  2. データベースから取得する場合は、確かにイメージのバイト配列があります。バイト配列を元のイメージに戻す必要があります。だから、あなたはBitmapFactoryの使用が

0

私の提案は、データベース内の画像を保存しないようであることをデコードするようにする必要があります。ディスクにイメージを保存し、データベースへのパスを書き込む方がはるかに高速です。

しかし、あなたはまだデータベースにイメージを書きたい場合、あなたはここで解決策を見つけることができます:writing image to dbとここwritting image to db2

あなたのSQLiteデータベースにあなたの画像を保存するためにBLOB(バイナリラージオブジェクト)を使用する必要があります。

0

は、ByteArrayのに

変換ビットマップを使用したByteArrayにあなたのビットマップ画像に変換します。その後、

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.myImage); 
ByteArrayOutputStream opstream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, opstream); 
byte[] bytArray = opstream.toByteArray(); 

、データベースに格納します。

次に使用してビットマップする[]その変換バイトの後、

byte[] imageArray = cursor.getBlob(YOUR_COLUMN_POSITION); 

を用いたByteArrayを受け、

ビットマップへのByteArrayを変換。

Bitmap bitmap = BitmapFactory.decodeByteArray(bytArray, 0, bytArray.length); 
ImageView img = (ImageView) findViewById(R.id.imgv1); 
img.setImageBitmap(bitmap); 

これかもしれないが、あなたを助けます。

関連する問題