android创建数据库(SQLite)保存图片示例

时间:2023-07-11 23:07:14 


//1.创建数据库
public class DBService extends SQLiteOpenHelper {

private final static int VERSION = 1;
private final static String DATABASE_NAME = "uniteqlauncher.db";

public DBService(Context context) {
    this(context, DATABASE_NAME, null, VERSION);
}

public DBService(Context context, String name, CursorFactory factory,
        int version) {
    super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String sql = "CREATE TABLE [launcher]("
        + "[_id] INTEGER PRIMARY KEY AUTOINCREMENT,"
        + "[photo] BINARY)"; //保存为binary格式

    db.execSQL(sql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(newVersion > oldVersion){
        db.execSQL("DROP TABLE IF EXISTS[launcher]");
    } else {
        return;
    }
    onCreate(db);
}
}
//保存图片到数据库
public void savePhoto(Drawable appIcon, Context mContext){
LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.app_view, null);
ImageView iv = (ImageView) v.findViewById(R.id.appicon);
iv.setImageDrawable(appIcon);
String INSERT_SQL = "INSERT INTO launcher(photo) values(?)";
SQLiteDatabase db = mDBService.getWritableDatabase(); // 得到数据库
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
((BitmapDrawable) iv.getDrawable()).getBitmap().compress(
CompressFormat.PNG, 100, baos);//压缩为PNG格式,100表示跟原图大小一样
Object[] args = new Object[] {baos.toByteArray() };
db.execSQL(INSERT_SQL, args);
baos.close();
db.close();
} catch (Exception e) {
e.printStackTrace();
}

}

//3.从数据库中取图片
public void getPhoto() {
String SELECT_SQL = "SELECT photo FROM launcher";
ImageView appIcon = (ImageView) v.findViewById(R.id.appicon);//v是我在类中定义的一个view对象,跟前面保存图片一样
byte[] photo = null;
mDBService = new DBService(getContext());
SQLiteDatabase db = mDBService.getReadableDatabase();
Cursor mCursor = db.rawQuery(SELECT_SQL, null);
if (mCursor != null) {
if (mCursor.moveToFirst()) {//just need to query one time
photo = mCursor.getBlob(mCursor.getColumnIndex("photo"));//取出图片
}
}
if (mCursor != null) {
mCursor.close();
}
db.close();
    ByteArrayInputStream bais = null;
if (photo != null) {
        bais = new ByteArrayInputStream(photo);
        appIcon.setImageDrawable(Drawable.createFromStream(bais, "photo"));//把图片设置到ImageView对象中
}
    //appIcon显示的就是之前保存到数据库中的图片
}

标签:android创建数据库,保存图片,sqlite
0
投稿

猜你喜欢

  • Map与JavaBean相互转换的工具类 

    2021-09-22 20:59:02
  • OpenHarmony实现类Android短信验证码及倒计时流程详解

    2021-11-14 10:55:26
  • Spring bean配置单例或多例模式方式

    2023-01-18 04:03:57
  • Scala异常处理的方法深入分析

    2022-01-09 19:50:35
  • 深入理解Java显式锁的相关知识

    2022-06-16 09:59:41
  • Java BufferWriter写文件写不进去或缺失数据的解决

    2023-07-20 14:57:02
  • Android开发笔记之:深入理解多线程AsyncTask

    2023-07-22 15:16:06
  • SpringBoot+Netty+WebSocket实现消息发送的示例代码

    2023-08-16 00:02:52
  • Android Studio与SVN版本控制程序的协作使用指南

    2021-11-08 15:16:08
  • Java多线程 Producer and Consumer设计模式

    2022-08-30 07:13:24
  • C语言中输入输出流与缓冲区的深入讲解

    2021-06-12 07:44:29
  • 通过IDEA快速定位和排除依赖冲突问题

    2021-06-07 02:01:16
  • 在Android环境下WebView中拦截所有请求并替换URL示例详解

    2022-05-26 06:21:56
  • C#生成漂亮验证码完整代码类

    2022-06-17 14:03:33
  • C#实现简易计算器功能(1)(窗体应用)

    2022-09-30 16:59:16
  • Java细数IO流底层原理到方法使用

    2022-08-06 21:30:45
  • Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端

    2023-08-19 17:32:33
  • Android实现遮罩层(蒙板)效果

    2023-04-26 18:43:03
  • java简单手写版本实现时间轮算法

    2023-01-05 14:50:38
  • CountDownLatch和Atomic原子操作类源码解析

    2023-06-07 06:31:52
  • asp之家 软件编程 m.aspxhome.com