在android中使用sqlite.execSQL函数传递参数

时间:2013-05-27 10:54:05

标签: android sqlite

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

  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格式插入,请帮我找到任何解决方案

2 个答案:

答案 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);

答案 1 :(得分: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();

    }