Android中SQlite数据库存取Bitmap(一)

简介: mainActivity如下: package cn.com; import java.io.ByteArrayOutputStream; import java.

mainActivity如下:

package cn.com;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import cn.db.DBservice;
import cn.db.Photo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    private Button mButton;
    private Bitmap mBitmap;
    private ImageView mImageView;
    private boolean isDownload=true;
    private boolean isSave=false;
    private boolean isLoadFromDB=false;
    private static final int DOWNLOAD_FINISH=88;
    private byte[] photoByte;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mButton=(Button) findViewById(R.id.button);
        mButton.setOnClickListener(new ButtonOnClickListener());
        mImageView=(ImageView) findViewById(R.id.imageView);
    }
   
   private class ButtonOnClickListener implements View.OnClickListener{
	public void onClick(View v) {
		if (isDownload) {
			new Thread(){
				public void run() {
					mBitmap=getBitmap("http://s12.sinaimg.cn/middle/4b181bd0gbf6cb07c2a1b&690");
					handler.sendEmptyMessage(DOWNLOAD_FINISH);
				}
			}.start();
		}
		if (isSave) {
			DBservice service=new DBservice(MainActivity.this);
			Photo photo=new Photo(1,mBitmap);
			service.save(photo,photoByte);
			isLoadFromDB=true;
			isSave=false;
			mButton.setText("从数据库中加载bitmap");
			mImageView.setImageBitmap(null);
			return;
		}
		if (isLoadFromDB) {
			DBservice service=new DBservice(MainActivity.this);
			Photo photo=service.find(1);
			mImageView.setImageBitmap(photo.getPhoto());
		}
	 }
   }
   
   Handler handler=new Handler(){
   	public void handleMessage(Message msg) {
   		switch (msg.what) {
			case DOWNLOAD_FINISH:
				mImageView.setImageBitmap(mBitmap);
				mButton.setText("保存图片至SQLite");
				isDownload=false;
				isSave=true;
				break;
			default:
				break;
			}
   	};
   };
   
	public Bitmap getBitmap(String imagePath) {
		try {
			URL imageUrl = new URL(imagePath);
			HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
			connection.setConnectTimeout(5000);
			connection.setRequestMethod("POST");
			if (connection.getResponseCode() == 200) {
				InputStream inputStream = connection.getInputStream();
				photoByte= readResource(inputStream);
				Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
				return bitmap;
			}
		} catch (Exception e) {
		}
		
		return null;
	};
   public byte[] readResource(InputStream inputStream){
	   try {
		   ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
	    	byte [] buffer=new byte[1024];
	    	int len=0;
	    	while( (len=inputStream.read(buffer))!=-1){
	    		   outputStream.write(buffer,0,len);
	    	}
	    	inputStream.close();
	    	outputStream.close();   	
	    	return outputStream.toByteArray();
	} catch (Exception e) {
	}
    return null;
   }
}

DataBaseOpenHelper.java如下:

package cn.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseOpenHelper extends SQLiteOpenHelper {


	public DataBaseOpenHelper(Context context) {
		super(context, "testbold.db", null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table test(photoid integer primary key autoincrement,id ingeter(10),photo Blob(20))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}

}


 


DBservice.java如下:

package cn.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class DBservice {
	private DataBaseOpenHelper openHelper;
	public DBservice(Context context) {
		openHelper=new DataBaseOpenHelper(context);
	}
	
	
	public void save(Photo photo,byte [] photoByte){
		SQLiteDatabase db=openHelper.getWritableDatabase();
        db.execSQL("insert into test (id,photo) values(?,?)",new Object[]{photo.getId(),photoByte});
        db.close();
	}
	
	
	public Photo find(int i){
		SQLiteDatabase db=openHelper.getWritableDatabase();
		Cursor cursor=db.rawQuery("select * from test where photoid=?", new String[]{String.valueOf(i)});
		while(cursor.moveToFirst()){
			int photoid=cursor.getInt(cursor.getColumnIndex("photoid"));
			byte[] photoByte=cursor.getBlob(cursor.getColumnIndex("photo"));          
			Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length); 
			Photo photo=new Photo(photoid, bitmap);
			return photo;
		}
		cursor.close();
		db.close();
		return null;
	}
	
}


Photo.java如下:

package cn.db;

import android.graphics.Bitmap;

public class Photo {
	private int id;
	private Bitmap bitmap;

	public Photo() {
	}

	public Photo(int id, Bitmap bitmap) {
		super();
		this.id = id;
		this.bitmap = bitmap;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Bitmap getPhoto() {
		return bitmap;
	}

	public void setPhoto(Bitmap bitmap) {
		this.bitmap = bitmap;
	}

}


 


 

相关文章
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
81 15
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
43 8
|
3月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
72 20
Android经典面试题之图片Bitmap怎么做优化
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
42 4
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
70 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
218 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
49 0
|
3月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
155 0
下一篇
DataWorks