http://www.eoeandroid.com/forum.php?mod=viewthread&tid=164587&extra=page=1
本帖最后由 huaxiannv 于 2012-4-2 21:30 编辑
本文参与:eoe & 友盟Android开发原创教程大赛
二维码和相片在SQLite数据库中的图片保存和查询
整体的工作流程如下:
保存流程:
查询流程:
该实例主要分为4个部分:
1、创建一个二维码和相片的数据库保存和查询的工程。
2、创建一个数据库。
3、二维码和相片的保存。
4、二维码和相片的查询。
1、创建工程
首先,打开已经配置好的android应用开发的集中开发环境Eclipse。创建一个新的工程SaveImage,Target为2.3.3,包名为:com.yiyiweixiao,主Activity为main。
如下图所示:
然后,创建一个新的布局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>
复制代码
效果图如下:
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) {
}
}
复制代码
然后,在main.java中创建MySQLiteOpenHelper类的实例,并创建一个可读写的数据库。
// 创建助手类的实例
// CursorFactory的值为null,表示采用默认的工厂类
mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
// 创建一个可读写的数据库
mydb = mySQLiteOpenHelper.getWritableDatabase();
复制代码
3、二维码和相片向数据库中保存的方法。
第一步:将图片转化为位图。
//将图片转化为位图
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();
复制代码
保存成功后,在DDMS中,即可看到保存成功的文件。
如下图所示:
用可视化开发工具打开后的列表如下所示:
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);
复制代码
在模拟器中的显示效果如下:
至此,便完成了二维码和图片在SQLite数据库中的保存和查询。
具体的代码详见源代码,这里只是列出了核心代码。谢谢。
分享到:
相关推荐
在.NET开发环境中,C#是一种常用的编程语言,而SQLite则是一种轻量级的、无服务器、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用。本示例重点讲解了如何利用C#与SQLite数据库交互,特别是涉及到图片数据的...
在描述中提到的问题是关于SQLite对中文模糊查询的支持。 在早期的一些SQLite版本中,由于编码或字符集处理的问题,可能会遇到在执行LIKE查询时,中文字符无法正确匹配的情况。LIKE操作符在SQL中用于执行模糊匹配,...
- 使用`EXPLAIN`:在查询语句前加上`EXPLAIN`,可以查看SQLite的查询计划,帮助分析和优化查询性能。 通过掌握以上技巧,你可以在SQLite中有效地进行分页查询和获取数据总数,同时确保应用的性能和响应速度。在实际...
SQLite是一种轻量级的、开源的、自包含的数据库引擎,常用于移动设备或嵌入式系统的数据存储。...通过理解BLOB类型和字节流的概念,以及如何在编程语言和SQLite之间交互,我们可以轻松地实现图片的上传、保存和下载。
在创建表时,或者在查询语句中,指定使用`chinese_pinyin` Collation。例如: ```sql CREATE TABLE my_table ( id INTEGER PRIMARY KEY, name TEXT COLLATE chinese_pinyin ); SELECT * FROM my_table ORDER BY...
在使用SQLite数据库进行查询操作时,遇到中文乱码问题,通常是由于编码设置不正确或数据存储与读取过程中编码不一致导致的。SQLite本身支持多种字符编码,包括UTF-8、UTF-16等,但在实际应用中,如果没有正确配置,...
以上代码示例展示了如何在Android应用中使用SQLite3来保存和读取图片。然而,对于大型图片,直接存储在数据库可能会导致性能问题,因为数据库操作相比文件系统来说速度较慢。因此,一种常见的优化策略是将图片存储在...
总的来说,理解和解决SQLite中的中文乱码和模糊查询问题,需要对SQLite的内部机制、字符编码以及SQL查询有深入的理解。通过阅读源码,开发者不仅可以找到问题的解决方案,还能提高自己的技能和经验,为以后的工作...
在本教程中,我们将深入探讨如何使用 sqlite.net2 数据查询分析器来操作 SQLite 数据库。 首先,让我们了解 SQLite 数据库的基本概念。SQLite 支持标准的 SQL 语法,允许用户创建数据库、表,以及执行各种数据操作...
本文将深入探讨如何在SQLite中创建带有时间字段的索引,以及如何利用这些索引来执行高效的SQL插入和查询操作。 首先,创建一个以时间字段为主键的表。在SQLite中,主键是一个或一组列,它们的值在表中是唯一的,...
当我们需要在数据库中保存照片时,就是将照片的二进制数据转换为BLOB类型并存储在相应的列中。 创建一个用于存储联系人的表结构至关重要。表通常由多个字段组成,每个字段对应一种特定的信息,如姓名、电话号码和...
在Java编程环境中,SQLite是一种轻量级的数据库引擎,常用于小型项目或嵌入式系统,因为它无需独立服务器进程,可以直接在应用中运行。本文将详细介绍如何通过传递参数的方法实现对SQLite数据库的添加和查询操作,...
本文将详细介绍如何在iOS应用中进行SQLite的基本操作,并探讨如何将图片保存到数据库中。 ### SQLite基本操作 1. **创建数据库**:首先,我们需要创建一个SQLite数据库。在iOS中,通常在应用的沙盒目录下创建...
在提供的压缩包文件"SqliteTest"中,可能包含了实现上述功能的代码示例或测试案例,可以帮助我们进一步理解和实践如何在Sqlite中存储和查询图片。通过学习这些示例,我们可以掌握如何在实际项目中运用这些技术。
SQLite 查询分析器是一款专为 SQLite 数据库设计的强大可视化管理工具,它为用户提供了直观的界面,使得在 SQLite 服务器上进行数据库操作变得简单易行。SQLite 是一款轻量级的、自包含的、无服务器的 SQL 数据库...
在查询结果返回后,可以使用QPixmap从图片路径加载图片,然后设置到QLabel的pixmap属性来显示。 综上所述,这个"Qt sqlite 实现的图片查询小工具"结合了Qt GUI编程和SQLite数据库管理,提供了一个实用的查询和显示...
该项目为unicode编码格式,一个简单...项目中用到的sqlite3.dll,sqlite3.lib是下载的最新的源代码自己编译生成的,所以应该是最新版本 为了丰富功能,又添加了开机自动运行,基于dialog程序的启动隐藏到系统托盘的功能
Delphi提供了与SQLite3交互的接口,允许开发者在应用程序中方便地存储和检索数据。然而,由于编码不匹配或者处理方式不当,可能会导致中文字符在存储或读取时出现乱码。 中文乱码的主要原因在于字符编码格式的不...
综上所述,这个项目展示了如何在 SQLite 数据库中处理图片,包括上传、下载和在 datagridview 中显示,这些都是基于 C# 的 ADO.NET 实现。理解和应用这些知识,有助于你在开发中更好地管理和展示图像数据。
在C语言中,SQLite3是一个轻量级的嵌入式数据库引擎,它允许开发者在程序中直接处理数据库操作。本文档介绍了如何使用C语言来实现SQLite3数据库的查询功能,特别是涉及了三种基本方法:callback、gettable以及预处理...