创建数据库中的Andr​​oid存储图像 [英] Creating database in android which stores image

查看:178
本文介绍了创建数据库中的Andr​​oid存储图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个新手,Android应用程序的开发。对于1我的项目,我需要将图像存储在数据库中。因此,这里就是我所做的。

I am a newbie to Android app development. For 1 of my project, I need to store images in a database. So here's what I did.

 package com.img.db;

 import java.io.ByteArrayOutputStream;

 import android.app.Activity;
 import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
 import android.util.Log;

 public class ImageDb extends Activity {
/** Called when the activity is first created. */
 DatabaseHelper dbHelper;
Bitmap[] images = new Bitmap [3];
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = this.getResources();
    images[0] = BitmapFactory.decodeResource(res,R.drawable.orange);
    //images[0] = Bitmap.createScaledBitmap(images[0], 70, 70, true) ;

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    images[0].compress(Bitmap.CompressFormat.PNG, 100, baos);

    //bm is the bitmap object

    byte[] b = baos.toByteArray();  
    String name;
    name="sample_1";
    MyImage img = new MyImage(name,b);
    dbHelper = new DatabaseHelper(this);
    dbHelper.AddImage(img);

    int n = dbHelper.getImageCount();
    Log.i("ImageCount","n == "+n);

}
} 

和MyImage.java:

and MyImage.java :

package com.img.db;
import java.io.ByteArrayOutputStream;
import java.sql.Blob;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;

public class MyImage {
int _id;
String _name;
byte[] _img;

public MyImage(String Name,byte[] Img)
{

    this._name=Name;
    this._img=Img;
}

public int getID()
{
    return this._id;
}
public void SetID(int ID)
{
    this._id=ID;
}

public String getName()
{
    return this._name;
}

public byte[] getImg()
{
    return this._img;
}

public void setName(String Name)
{
    this._name=Name;
}
public void setImg(Bitmap bitmap)
{
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.PNG, 0, outputStream);
    this._img = outputStream.toByteArray();
}
}

和DatabaseHelper.java为:

and DatabaseHelper.java as :

package com.img.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

static final String dbName="imageDB";
static final String imgTable="MyImage";
static final String colID="ImageID";
static final String colName="ImageName";
static final String colbytes ="Imagebytes";

public DatabaseHelper(Context context) {
    super(context, dbName, null,33);

    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    Log.i("in here", "creating database");
    db.execSQL("CREATE TABLE "+ imgTable+" ("+ colID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+ colbytes + "BLOB, "
            + colName + " TEXT)");

    //Inserts pre-defined departments

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

    db.execSQL("DROP TABLE IF EXISTS "+ imgTable);
    onCreate(db);
}
void AddImage(MyImage img)
{
     Log.i("in here", "adding image");          
     SQLiteDatabase db= this.getWritableDatabase();

    if (db==null)
    {
        Log.i("nulll", "mnllllsg");
    }
    ContentValues cv=new ContentValues();

    cv.put(colName, img.getName());
    cv.put(colbytes, img.getImg());
    cv.put(colID, 1);
    db.insert(imgTable, colID, cv);
    db.close();


}

 int getImageCount()
 {
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor cur= db.rawQuery("Select * from "+imgTable, null);
    int x= cur.getCount();
    cur.close();
    return x;
 }

 Cursor getAllImages()
 {
     SQLiteDatabase db=this.getWritableDatabase();

     //Cursor cur= db.rawQuery("Select "+colID+" as _id , "+colName+", "+colAge+" from "+employeeTable, new String [] {});
     Cursor cur= db.rawQuery("SELECT * FROM "+imgTable,null);
     return cur;

 }

 public int UpdateImg(MyImage img)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     ContentValues cv=new ContentValues();
     cv.put(colName, img.getName());
     cv.put(colbytes, img.getImg());
     return db.update(imgTable, cv, colID+"=?", new String []{String.valueOf(img.getID())});

 }

 public void DeleteImg(MyImage img)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     db.delete(imgTable,colID+"=?", new String [] {String.valueOf(img.getID())});
     db.close();



 }

 }

错误日志

 I/in here (  635): adding image
 I/SqliteDatabaseCpp(  635): sqlite returned: error code = 1, msg = table MyImage has  no column named Imagebytes, db=/data/data/com.img.db/databases/imageDB
 E/SQLiteDatabase(  635): Error inserting ImageName=sample_1 ImageID=1 Imagebytes=[B@406ed320
 E/SQLiteDatabase(  635): android.database.sqlite.SQLiteException: table MyImage has no column named Imagebytes: , while compiling: INSERT INTO  MyImage(ImageName,ImageID,Imagebytes) VALUES (?,?,?)

请指出我的错误,在code或给我一些指针在那里我能得到一些帮助。

Please point out my mistake in the code or give me some pointer where I can get some help.

任何帮助将是巨大的:)

Any help would be great :)

推荐答案

错误是pretty的自我explainatory,您试图访问一个列的表不存在:

The error is pretty self explainatory, you are trying to access a column's table that doesn't exists:

table MyImage has no column named Imagebytes

这篇关于创建数据库中的Andr​​oid存储图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆