![](http://www.apkbus.com/data/attachment/forum/201204/09/201204ghf003a7l9qab7aq.png)
二维码和相片在SQLite数据库中的图片保存和查询
整体的工作流程如下:
保存流程:
![](http://www.apkbus.com/data/attachment/forum/201204/09/201204fwdaw2dgf77767mj.png)
查询流程:
![](http://www.apkbus.com/data/attachment/forum/201204/09/2012046y67y3bgwj6gl16l.png)
该实例主要分为4个部分:
1、创建一个二维码和相片的数据库保存和查询的工程。
2、创建一个数据库。
3、二维码和相片的保存。
4、二维码和相片的查询。
1、创建工程
首先,打开已经配置好的android应用开发的集中开发环境Eclipse。创建一个新的工程SaveImage,Target为2.3.3,包名为:com.yiyiweixiao,主Activity为main。
如下图所示:
![](http://www.apkbus.com/data/attachment/forum/201204/09/201205q83193aoonfr80ai.png)
然后,创建一个新的布局main.xml
布局代码如下所示:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button android:layout_height="wrap_content" android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:text="保存图片1"
- android:layout_alignParentTop="true" android:layout_alignParentLeft="true"></Button>
- <Button android:layout_height="wrap_content" android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:text="保存图片2"
- android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button1"></Button>
- <Button android:layout_height="wrap_content" android:id="@+id/button3"
- android:layout_width="wrap_content"
- android:text="查询图片1"
- android:layout_below="@+id/button1" android:layout_alignParentLeft="true"></Button>
- <Button android:layout_height="wrap_content" android:id="@+id/button4"
- android:layout_width="wrap_content"
- android:text="查询图片2"
- android:layout_alignBaseline="@+id/button3"
- android:layout_alignBottom="@+id/button3" android:layout_toRightOf="@+id/button3"></Button>
- <ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
- android:id="@+id/imageView1"
- android:layout_height="wrap_content"
- android:layout_below="@+id/button3" android:layout_alignParentLeft="true"></ImageView>
- <ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
- android:id="@+id/imageView2"
- android:layout_height="wrap_content"
- android:layout_alignTop="@+id/imageView1" android:layout_alignLeft="@+id/button4"></ImageView>
- </RelativeLayout>
效果图如下:
![](http://www.apkbus.com/data/attachment/forum/201204/09/201429u29rfo2gjhtqrqi0.png)
2、创建一个数据库
首先,在包com.yiyiweixiao下面,创建一个SQLiteOpenHelper助手类的实例MySQLiteOpenHelper.java。
代码如下:
- package com.yiyiweixiao;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- public class MySQLiteOpenHelper extends SQLiteOpenHelper {
- // 重写构造方法
- public MySQLiteOpenHelper(Context context, String name,
- CursorFactory cursor, int version) {
- super(context, name, cursor, version);
- }
- // 创建数据库的方法
- public void onCreate(SQLiteDatabase db) {
- // 创建一个数据库,表名:imagetable,字段:_id、image。
- db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
- }
- // 更新数据库的方法
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- }
- }
- // 创建助手类的实例
- // CursorFactory的值为null,表示采用默认的工厂类
- mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
- // 创建一个可读写的数据库
- mydb = mySQLiteOpenHelper.getWritableDatabase();
- //将图片转化为位图
- Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.erweima);
- int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
- //创建一个字节数组输出流,流的大小为size
- ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
- //设置位图的压缩格式,质量为100%,并放入字节数组输出流中 bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
- //将字节数组输出流转化为字节数组byte[]
- byte[] imagedata1=baos.toByteArray();
- //将字节数组保存到数据库中
- ContentValues cv=new ContentValues();
- cv.put("_id", 1);
- cv.put("image", imagedata1);
- mydb.insert("imagetable", null, cv);
- //关闭字节数组输出流
- baos.close();
![](http://www.apkbus.com/data/attachment/forum/201204/09/201429z944gkg3j84yo8zj.png)
用可视化开发工具打开后的列表如下所示:
![](http://www.apkbus.com/data/attachment/forum/201204/09/2014293o0gbry090b2b1by.png)
4、从数据库中查询二维码和相片的方法。第一步:将数据库中的Blob(二进制大对象类型)数据转换为字节数组。方法如下:
- //创建一个指针
- Cursor cur=mydb.query("imagetable", new String[]{"_id","image"}, null, null, null, null, null);
- byte[] imagequery=null;
- if(cur.moveToNext()){
- //将Blob数据转化为字节数组imagequery=cur.getBlob(cur.getColumnIndex("image"));
- }
- //将字节数组转化为位图
- Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
- iv1=(ImageView) findViewById(R.id.imageView1);
- //将位图显示为图片
- iv1.setImageBitmap(imagebitmap);
![](http://www.apkbus.com/data/attachment/forum/201204/09/201429qa1q4q4t8a0qd9kj.png)
至此,便完成了二维码和图片在 SQLite 数据库中的保存和查询。具体的代码详见源代码,这里只是列出了核心代码。谢谢。