Hayya ANAM
Hayya ANAM

Reputation: 575

how to save image in sqllite database?

this is my code below which browse imagew gellery and pick image but how do insert image view in database? this code sucessfuly show on screen selected image but not store in database how to pass image parameter? in that line where i comment/what i write here/

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class AddEditCountry extends Activity {

 private long rowID; 
 private EditText nameEt;
 private EditText capEt;
 private EditText codeEt;    
 private EditText Donedate;
 private EditText Notes;
 private EditText Person;
 private  ImageView imageView1;
 Bitmap yourSelectedImage;
 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_country);

    nameEt = (EditText) findViewById(R.id.Address);
    capEt = (EditText) findViewById(R.id.Stage);
    codeEt = (EditText) findViewById(R.id.Dueby);

    Donedate = (EditText) findViewById(R.id.Donedate);

    Notes = (EditText) findViewById(R.id.Notes);
    Person = (EditText) findViewById(R.id.Person);

    imageView1 = (ImageView) findViewById(R.id.imageView1);
    Button Browse = (Button) findViewById(R.id.Browse);

    Browse.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {               
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(intent, 0);
        }
    });        

    Bundle extras = getIntent().getExtras(); 

    if (extras != null)
    {
         rowID = extras.getLong("row_id");
         nameEt.setText(extras.getString("name"));  
         capEt.setText(extras.getString("cap"));  
         codeEt.setText(extras.getString("code"));  
         Donedate.setText(extras.getString("Location"));  
         Notes.setText(extras.getString("Notes")); 
         Person.setText(extras.getString("Person")); 
         imageView1.setImageURI(yourSelectedImage);

    }

    Button saveButton =(Button) findViewById(R.id.saveBtn);
    saveButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) 
        {
           if (nameEt.getText().length() != 0)
           {
              AsyncTask<Object, Object, Object> saveContactTask = 
                 new AsyncTask<Object, Object, Object>() 
                 {
                    @Override
                    protected Object doInBackground(Object... params) 
                    {
                       saveContact();
                       return null;
                    }

                    @Override
                    protected void onPostExecute(Object result) 
                    {
                       finish();
                    }
                 }; 

              saveContactTask.execute((Object[]) null); 
           }

           else
           {
              AlertDialog.Builder alert = new  
      AlertDialog.Builder(AddEditCountry.this);
              alert.setTitle(R.string.errorTitle); 
              alert.setMessage(R.string.errorMessage);
              alert.setPositiveButton(R.string.errorButton, null); 
              alert.show();
           }
        } 
    });
   }

   private void saveContact() 
   {
      DatabaseConnector dbConnector = new DatabaseConnector(this);

      if (getIntent().getExtras() == null)
      {
/* what i write here for  image*/          
      dbConnector.insertContact(nameEt.getText().toString(),
                  capEt.getText().toString(),
                  codeEt.getText().toString(),
                  Donedate.getText().toString(),
                  Notes.getText().toString(),
                  Person.getText().toString(), null




                  );
      }
      else
/* what i wirte here for image*/      {
         dbConnector.updateContact(rowID,
            nameEt.getText().toString(),
            capEt.getText().toString(), 
            codeEt.getText().toString(), 
            Donedate.getText().toString(),
         Notes.getText().toString(),
          Person.getText().toString(), null


         );
      }
   }











   protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
       super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

       switch(requestCode) {
       case 0:
           if(resultCode == RESULT_OK){
               Uri selectedImage = imageReturnedIntent.getData();
               String[] filePathColumn = {MediaStore.Images.Media.DATA};

               Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
               cursor.moveToFirst();

               int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
               String filePath = cursor.getString(columnIndex); // file path of selected image
               cursor.close();
                       //  Convert file path into bitmap image using below line.
               yourSelectedImage = BitmapFactory.decodeFile(filePath);

                       // put  bitmapimage in your imageview
               imageView1.setImageBitmap(yourSelectedImage);
           }
       }
    }







}

Upvotes: 0

Views: 627

Answers (3)

android developer
android developer

Reputation: 116332

i would suggest to avoid saving images to database , not only on android .

this makes sense since it will slow down anything that is related to the database . also , the cursor won't be able to cache the results in order to move between the rows of the tables.

instead , put a filename to point to a path on your app's storage . you could also add where it's stored (internal/external storage) .

Upvotes: 0

urveshpatel50
urveshpatel50

Reputation: 1685

First make field in sqlite as blob datatype

than get byte and store in databse image.getBytes();

or if you have bitmap than convert into byte array

and store into database

 public static byte[] getBitmapAsByteArray(Bitmap bitmap, boolean type) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    if (type) {
        bitmap.compress(CompressFormat.PNG, 0, outputStream);
    } else {
        bitmap.compress(CompressFormat.JPEG, 0, outputStream);
    }
    return outputStream.toByteArray();
}

Upvotes: 1

Dipak Keshariya
Dipak Keshariya

Reputation: 22291

Please use below code for store images into sqlite database, it will solve your problem.

MySQLActivity.java:-

public class MySQLActivity extends Activity implements OnClickListener
{
    protected static TextView textView;
    protected static ImageView bmImage;
    protected Button start;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        bmImage = (ImageView)findViewById(R.id.imageView1);
        textView = (TextView) findViewById(R.id.textView1);

        start = (Button) findViewById(R.id.button1);
        start.setOnClickListener(this); 

        DownloadFile();
    }

    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/Nick/MyWeatherDB.db", Context.MODE_PRIVATE, null);

        String s=myDb.getPath();
        textView.append("\r\n" + s+"\r\n");       
        myDb.execSQL("delete from emp1");
        ContentValues newValues = new ContentValues();
        newValues.put("fio", "Иванов Петр Сергеевич");

        /////////// insert picture to blob field ///////////////////// 
        try
        {
            FileInputStream instream = new FileInputStream("/sdcard/Dipak/Keshariya.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();
  }

  public void DownloadFile() 
  {   
      Bitmap bitmap1 = null;                    
      bitmap1 = BitmapFactory.decodeFile("/sdcard/Dipak/Dipak.jpg"); //weather.png");
      bmImage.setImageBitmap(bitmap1);
  }
}

Upvotes: 0

Related Questions