2

我想使用插入或替换查询,这里我给出了我拥有的代码

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

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

现在我想在该表中另外插入一个字段,但该字段不是字符串,它是字节数组格式,我想在该表中添加一个图像,我在表中将该图像的数据类型指定为 BLOB,但我不能能够将字节数组格式作为参数传递到上面的 sqlite.execsql 函数中,这里我给出了我想要插入的格式

byte []byteImage;

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

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

我怎样才能使它成为可能,我无法将此字节数组转换为字符串我只想将图像插入为 BLOB 格式,请帮我找到任何解决方案

4

2 回答 2

2

使用insert 方法的变体,它接受一个ContentValues 对象,它允许您直接使用字节数组:

byte[] byteImage;
ContentValues cv = new ContentValues();
cv.put("id", id);
// ...
cv.put("blobcolumn", byteImage);
sqlite.insertWithOnConflict("Stock_Table", null, cv, SQLiteDatabase.CONFLICT_REPLACE);
于 2013-05-27T11:06:39.163 回答
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();

    }
于 2013-05-27T11:08:55.500 回答