2014-11-20 5 views
1

Я хочу сохранить изображения в моей базе данных, но я не уверен в одномAndroid SQLite блоб базы данных Тип данных

У меня есть этот метод класса, который расширяет SQLiteOpenHelper

public boolean insertDemo(byte[] a, byte[] b, byte[] c, byte d) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put("id", 1); 
     cv.put("demo1", a); 
     cv.put("demo2", b); 
     cv.put("demo3", c); 
     cv.put("demo4", d); 
     db.insert("demo_tb", null, cv); 
     return true; 
} 

Мой вопрос, какие должен ли тип данных быть? в настоящее время у меня есть

db.execSQL("create table demo_tb"+"(id integer primary key,demo1 text,demo2 text,demo3 text,demo4 text)"); 

в onCreate метод.

+1

это поможет вам https: //www.sqlite .org/datatype3.html –

ответ

0

Я использую тип BLOB, я не вижу, с хорошим типом использования глаз TEXT, чтобы сохранить массив байтов

Как это:

protected static final String CREATE_TABLE_IMAGE = 
      "CREATE TABLE IMAGES" 
      + "(" 
      + " IMAGE_ID" 
      + " INTEGER PRIMARY KEY ," 
      + " IMAGE_BLOB" 
      + " BLOB " 
      +")"; 

    public void CreateTable(String strCreate){ 
     SQLiteDatabase db = getWritableDatabase(); 
     db.execSQL(strCreate); 
    } 

    public boolean saveBytes(byte[] bytes, int id){ 

     boolean ret = false; 
     SQLiteDatabase db = getWritableDatabase(); 
     db.beginTransaction(); 

     try{ 

     String sql = "INSERT INTO IMAGES " 
       + " (IMAGE_ID" 
       + ", IMAGE_BLOB" 
       + ") VALUES(?,?)"; 

     SQLiteStatement insertStmt  = db.compileStatement(sql); 
     insertStmt.clearBindings(); 
     insertStmt.bindLong(1, id); 
     insertStmt.bindBlob(2, bytes); 
     insertStmt.executeInsert(); 

     db.setTransactionSuccessful(); 
     db.endTransaction(); 

     ret = true; 
     }catch(Exception e){ 
      e.printStackTrace(); 
      ret = false; 
     } 

     return ret; 
    } 

    public byte[] getBytes(int id) throws Exception { 

     byte[] ret = null; 

     try { 

      String selectQuery = "SELECT I.IMAGE_BLOB " 
        + "   FROM IMAGES I WHERE I.IMAGE_ID = ?"; 

      SQLiteDatabase db = this.getReadableDatabase(); 
      Cursor c = db.rawQuery(selectQuery,new String[]{String.valueOf(id)}); 


      if (!c.isClosed() && c.moveToFirst() && c.getCount() > 0) { 

       if (c.getBlob(c.getColumnIndex("IMAGE_BLOB")) != null) 
       {     
        ret = c.getBlob(c.getColumnIndex("IMAGE_BLOB")); 

       } 
       c.close(); 
       if (db != null && db.isOpen()) 
        db.close(); 
      } 
      System.gc(); 
     } catch (Exception e) { 
      System.gc(); 
      throw e; 

     } 
    } 
2

для сохранения изображений в базе данных sqlite вы должны использовать тип данных BLOB для этого столбца в таблице.