androidsqlite图片
工具/原料
SQLite Expert Professional
方法/步骤
安装SQLite Expert Professional 可以在网上下载,我下载的是试用版,没有找注册码,但是试用不影响使用,反正用几次查看到数据库操作没有错误就不用这个工具了。当然也可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。先介绍使用DDMS导出sqlite数据库的操作和使用adb工具访问sqlite数据库。
首先打开android项目的调试模式,然后找到显示DDMS
切换到DDMS,显示File Explorer窗口,找到/data/data/ 如下图1 ,
然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。如下图2.
这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如SQLite Expert Professional可以打开该数据库了。其他 sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager也可以打开该数据库。
使用adb工具访问sqlite数据库
Android Debug Bridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,我们 知道android是基于linux内核,它的内部文件结构也是采用linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用 shell来访问android应用中的sqlite数据库文件。
1、运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:如下图
进入数据库所在目录:
shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases 如下图1, 找到数据库文件如下图2。
使用sqlite管理工具来进行数据库操作
键入sqlite3 数据库名就进入了sqlite管理模式了。
如下图
设置sqlite环境变量:
在android的sdk中自带了sqlite3.exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系 统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。
如下图:
使用sqlite管理数据库:
sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。
sqlite常用命令:
.tables--查看数据库的表列表
.exit--退出sqlite命令行
其他命令可随时.help查看帮助。sql命令可直接在此命令行上执行即可:
如下图:
‘贰’ android开发中如何在sqlite中创建一个的一个表和该表对应的方法类,目前最头疼的就是图标的图片存取了
下面这个文件创建了Book.db,创建了表book,另外提供两个简单的方法,里面有很多不完善的地方,没有一一写出来。时间有限,希望能帮助到你。
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.ByteArrayOutputStream;
import static com.ume.myapplication.Columns.BOOK_AUTHOR;
/**
* _ Created by AlphaGo on 2017/3/11. just simple sample
*/
public class BookDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "Book.db";
public static final String TABLE_BOOK = "Book";
public static final int DB_VERSION = 1;
private Context mContext;
public BookDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
createBookmarkTbl(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
private void createBookmarkTbl(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_BOOK + "("
+ Columns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ BOOK_AUTHOR + " TEXT,"
+ Columns.BOOK_INTRODUCTION + " TEXT,"
+ Columns.BOOK_LABEL + " TEXT ,"
+ Columns.BOOK_NAME + " INTEGER NOT NULL DEFAULT 0,"
+ Columns.BOOK_PRICE + " FLOAT,"
+ Columns.BOOK_STOCK + " INTEGER NOT NULL,"
+ Columns.BOOK_ICON + " BLOB"
+ ");");
}
/**
* Insert Item
*/
public long insertItem(Book book) {
long id;
ContentValues initValues = new ContentValues();
ByteArrayOutputStream os = new ByteArrayOutputStream();
book.icon.compress(Bitmap.CompressFormat.PNG, 100, os);
initValues.put(BOOK_AUTHOR, book.author);
initValues.put(Columns.BOOK_INTRODUCTION, book.introction);
initValues.put(Columns.BOOK_LABEL, book.label);
initValues.put(Columns.BOOK_NAME, book.name);
initValues.put(Columns.BOOK_PRICE, book.price);
initValues.put(Columns.BOOK_STOCK, book.stock);
initValues.put(Columns.BOOK_ICON, os.toByteArray());
SQLiteDatabase db = getWritableDatabase();
id = db.insert(TABLE_BOOK, null, initValues);
db.close();
return id;
}
/**
* retrieve item by database index
*/
public Book getItemByIndex (int index){
Book book = new Book();
SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.query(TABLE_BOOK, null, "_id =?", new String[]{String.valueOf(index)}, null, null, null);
while (cursor.moveToNext()){
int id = cursor.getInt(0);
String author = cursor.getString(1);
String introction = cursor.getString(2);
String label = cursor.getString(3);
String name = cursor.getString(4);
float price = cursor.getFloat(5);
int stock = cursor.getInt(6);
byte[] bytes = cursor.getBlob(7);
Bitmap icon = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
book.icon = icon;
// TODO: 2017/3/11 one more thing
}
return book;
}
private static class Book {
public String author;
public String introction;
public String label;
public String name;
public float price;
public int stock;
public Bitmap icon;
}
}
‘叁’ android中怎么用sqlite存储一个map
在进行Android开发过程中,我们经常会接触到Drawable对象(官方开发文档:A Drawable is a general abstraction for "something that can be drawn."),那么,若要使用数据库来进行存储及读取,该如何实现?
一、存储
//第一步,将Drawable对象转化为Bitmap对象
Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap());
//第二步,声明并创建一个输出字节流对象
ByteArrayOutputStream os = new ByteArrayOutputStream();
//第三步,调用compress将Bitmap对象压缩为PNG格式,第二个参数为PNG图片质量,第三个参数为接收容器,即输出字节流os
bmp.compress(Bitmap.CompressFormat.PNG, 100, os);
//第四步,将输出字节流转换为字节数组,并直接进行存储数据库操作,注意,所对应的列的数据类型应该是BLOB类型
ContentValues values = new ContentValues();
values.put("image", os.toByteArray());
db.insert("apps", null, values);
db.close();
‘肆’ 有哪些比较好的AndroidSQLite开源工具类(android中的sqlite数据库具有哪些特点)
是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Androidmvc、简易sqliteorm、ioc模块、封装Androidhttpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,如日志管理,配置文件管理,android下载器模块,网络切换检测等等工具。
目前主要有以下模块:
MVC模块:实现视图与模型的分离。
ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
配迅扰颂置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进李肆行控制、如开始、暂停、删除等亩郑等。
网络状态检测模块:当网络状态改变时,对网络状态进行检测。
‘伍’ android 什么时候使用sqlite
如果是本地数据的需求用SQlite,如果像登陆有用验证或者网络间共享数据的话,就需要调用WebService与后台服务器数据交互,这两种数据是没有联系的。一个是本地数据库,一个是服务器端数据库。本地用数据库就是SQlite,别的不太可能,终端没有那么高的性能,再说甲骨文公司也没出手机端oracle啊。
如果你的数据是已知的,静态的,没有太多的变化,满可以在本地SQlite中存储、读取。这样不会因网络问题而降低效率和成功率。如果数据未知、有实时的变化或者有与其他用户交互、共享的数据必然需要后台服务器数据
下面是sqlite增删改查的例子,更多例子请参考android学习手册,例子、源码、文档全部搞定,采用androidstudo的目录结构,360手机助手中下载。
‘陆’ 求助!android开发 如何将图片添加进SQlite数据库
图片等二进制媒体数据可以保存到BLOB类型的字段里,例子:
http://blog.csdn.net/zhouyongyang621/archive/2010/03/26/5418586.aspx
但是一般不推荐这么做,因为如果保存大量媒体数据那么数据库的大小会激增,导致数据库访问性能下降。还是把图保存到文件里,然后在数据库里加个字段引用文件路径吧。
建议你尽可能把图保存到SD卡上(/sdcard),如果没有SD卡就保存到应用程序的私有目录里(/data/data/packagename/)
‘柒’ 怎样解决android SQLite 图片是以图片的存储路径的方式存储的,读取并显示在GridVi.
String
picPath
=
c.getString(c.getColumnIndex("pic"));BitmapFactory.Options
options
=
new
BitmapFactory.Options();
options.inSampleSize
=
2;
Bitmap
bitmap
=
BitmapFactory.decodeFile(picPath,
options);CheckMenu
cm
=
new
CheckMenu();
cm.setBm(bitmap);list.add(cm);//list
是这样定义的List
list
=
new
ArrayList();//在GridView的getview(),里我自定义了一个布局imageView
=
(ImageView)
v.findViewById(R.id.diancai_view_ImageView01);CheckMenu
cm
=
(CheckMenu)
list.get(position);imageView.setImageBitmap(cm.getBm());请问这几行代码有问题吗?
为什我我运行就是现实不出来图片,而且没有报错信息!