2013-05-27 2 views
2

я хочу использовать вставку или заменить запрос, здесь им дает код, который я имеюпередача параметров с функцией sqlite.execSQL в андроида

String sql="insert or replace into Stock_Table values (?,?,?,?,?,?)"; 

    sqlite.execSQL(sql, new String[]{id,name,code,vat,itmquan,pric}); 

теперь я хочу, чтобы дополнительно ввести еще одно поле в таблице, но это field не строка его формат массива байтов, я хочу добавить изображение в эту таблицу, я дал тип данных для этого изображения как BLOB в таблице, но я не могу передать формат массива байтов в качестве параметра в вышеупомянутый sqlite .execsql func, здесь im дает формат, который я хочу вставить

byte []byteImage; 

String sql="insert or replace into Stock_Table values (?,?,?,?,?,?,?)"; 

sqlite.execSQL(sql, new String[]{id,name,code,vat,itmquan,pric,byteImage}); 

Как я могу сделать это, я не могу преобразовать этот массив байтов в строку Я хочу вставить изображение только в формате BLOB, пожалуйста, помогите мне найти решение

+0

см эту ссылку http://www.coderanch.com/t/550604/Android/Mobile/insert-retreive-image-database –

+0

это li nk настолько плохой ... вы не должны использовать execSQL для SELECT/INSERT/UPDATE/DELETE !!! http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#replace(java.lang.String,%20java.lang.String,%20android.content.ContentValues) – Selvin

+0

Я уже пробовал как @ сказал сунил, но я не смог вставить полученную ошибку, есть ли другие способы? –

ответ

2

Используйте вариант insert method, который принимает ContentValues object, что позволяет использовать массив байтов непосредственно:

byte[] byteImage; 
ContentValues cv = new ContentValues(); 
cv.put("id", id); 
// ... 
cv.put("blobcolumn", byteImage); 
sqlite.insertWithOnConflict("Stock_Table", null, cv, SQLiteDatabase.CONFLICT_REPLACE); 
+0

, а затем о опции замены? –

+0

Я не могу поставить CONFLICT_REPLACE в эту функцию. –

0

использовать этот способ ..

@Override 
    public void onClick(View v) { 

     SQLiteDatabase myDb;  
     String MySQL; 
     int icount; 
     byte[] byteImage1 = null; 
     byte[] byteImage2 = null; 

     MySQL="create table emp1(_id INTEGER primary key autoincrement, fio TEXT not null, picture BLOB);"; 
      myDb = openOrCreateDatabase("/sdcard/MyDB.db", Context.MODE_PRIVATE, null); 
     //  myDb.execSQL(MySQL); 
      String s=myDb.getPath(); 
      textView.append("\r\n" + s+"\r\n");  
      myDb.execSQL("delete from emp1"); 
      ContentValues newValues = new ContentValues(); 
      newValues.put("fio", "hello dude"); 

      /////////// insert picture to blob field ///////////////////// 
      try 
      { 
      FileInputStream instream = new FileInputStream("/sdcard/sunil.png"); 
      BufferedInputStream bif = new BufferedInputStream(instream); 
      byteImage1 = new byte[bif.available()]; 
      bif.read(byteImage1); 
      textView.append("\r\n" + byteImage1.length+"\r\n"); 
      newValues.put("picture", byteImage1); 

      long ret = myDb.insert("emp1", null, newValues); 
      if(ret<0) 
     textView.append("\r\n!!! Error add blob filed!!!\r\n"); 
      } catch (IOException e) 
      { 
       textView.append("\r\n!!! Error: " + e+"!!!\r\n"); 
      } 

     ////////////Read data //////////////////////////// 
     Cursor cur = myDb.query("emp1",null, null, null, null, null, null); 
      cur.moveToFirst(); 
      while (cur.isAfterLast() == false) 
      { 
       textView.append("\r\n" + cur.getString(1)+"\r\n"); 
       cur.moveToNext(); 
      } 
     ///////Read data from blob field//////////////////// 
      cur.moveToFirst(); 
      byteImage2=cur.getBlob(cur.getColumnIndex("picture")); 
     bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage2, 0, byteImage2.length)); 
      textView.append("\r\n" + byteImage2.length+"\r\n"); 
     ////////////////////////// 
      cur.close(); 
      myDb.close(); 

    } 
Смежные вопросы