精华内容
下载资源
问答
  • Android开发——利用数据库存储图片

    千次阅读 2015-03-13 19:39:56
    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite 3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在...

    keyWord: Blob,database




    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite

    3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数

    据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文

    件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且

    备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。

    个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获

    得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细

    介绍数据库存取图片的方法:


    MyDatabaseHelper.jave:






    Test.jave:



    展开全文
  • Android数据库存储数据(Room、GreenDao、Sqlite) 一、GreenDao的数据库框架: 二、Google的Room组件框架(参考官网学习地址:学习Room): 1、AndroidStudio的gradle依赖: 2、实体类构造: 3、集成...

    目录

    Android数据库存储数据(Room、GreenDao、Sqlite)

    一、GreenDao的数据库框架:

    二、Google的Room组件框架(参考官网学习地址:学习Room):

    1、AndroidStudio的gradle依赖:

    2、实体类构造:

    3、集成RoomDatabase的数据库:

    4、Dao的操作类:

    5、简单的使用:

    三、Android Sqlite:

    1、创建表的字段类:

    2、Sqlite的Helpr类:

    3、简单的增删改查工具类:


    Android数据库存储数据(Room、GreenDao、Sqlite)

    一、GreenDao的数据库框架:

    去GreenDao的使用

    二、Google的Room组件框架(参考官网学习地址:学习Room):

    1、AndroidStudio的gradle依赖:

    //在 defaultConfig下配置该属性,那么创建的数据库的信息会在src的同目录下创建schemas文件夹        
    javaCompileOptions {
                annotationProcessorOptions {
                    arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
                }
            }
    
    //=====================================================================
    
        implementation "android.arch.persistence.room:runtime:1.0.0"
        annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

    2、实体类构造:

    package com.zbv.newdesttop.Entities;
    
    import android.arch.persistence.room.ColumnInfo;
    import android.arch.persistence.room.Entity;
    import android.arch.persistence.room.PrimaryKey;
    
    /**
     * author: qzx
     * Date: 2019/3/1 13:52
     */
    @Entity
    public class Person {
        @PrimaryKey(autoGenerate = true)
        public int id;
    
        @ColumnInfo(name = "first_name")
        public String firstName;
        @ColumnInfo(name = "last_name")
        public String lastName;
    }
    

    3、集成RoomDatabase的数据库:

    package com.zbv.newdesttop.roomdao;
    
    import android.arch.persistence.room.Database;
    import android.arch.persistence.room.RoomDatabase;
    
    import com.zbv.newdesttop.Entities.Person;
    
    /**
     * author: qzx
     * Date: 2019/3/1 14:12
     */
    @Database(entities = {Person.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        //要采取单例模式,因为每次创建会代价昂贵
        public abstract PersonDao personDao();
    }
    

    4、Dao的操作类:

    package com.zbv.newdesttop.roomdao;
    
    import android.arch.persistence.room.Dao;
    import android.arch.persistence.room.Delete;
    import android.arch.persistence.room.Insert;
    import android.arch.persistence.room.Query;
    import android.arch.persistence.room.Update;
    
    import com.zbv.newdesttop.Entities.Person;
    
    import java.util.List;
    
    /**
     * author: qzx
     * Date: 2019/3/1 14:04
     */
    @Dao
    public interface PersonDao {
    
        @Query("SELECT * FROM person")
        public List<Person> getAll();
    
        @Query("SELECT * FROM person WHERE id in (:userIds)")
        public List<Person> getAllById(int[] userIds);
    
        @Query("SELECT * FROM person WHERE first_name LIKE :first AND last_name LIKE :last LIMIT 1")
        public Person findByName(String first, String last);
    
        @Update
        public void updateUsers(Person... person);
    
        @Insert
        public void insertAll(Person... person);
    
        @Delete
        public void delete(Person person);
    }
    

    5、简单的使用:

    //如果操作数据库不开线程执行会报错,不能再主线程执行
    //Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
            AppDatabase appDatabase = Room.databaseBuilder(this, AppDatabase.class, "roomdao.db").build();
            personDao = appDatabase.personDao();
    
    //添加数据
       new Thread(new Runnable() {
                @Override
                public void run() {
                    Person person = new Person();
                    person.firstName = "周";
                    person.lastName = "尘";
    
                    Person person_2 = new Person();
                    person_2.firstName = "王";
                    person_2.lastName = "福";
                    personDao.insertAll(person, person_2);
    
                    Log.e("zbv", "add complete...");
                }
            }).start();
    
    //查询数据
      new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.e("zbv", "to query....");
                    List<Person> ps = personDao.getAll();
                    Log.e("zbv", "isNull?" + (ps == null) + ";size=" + ps.size());
                    for (Person person : ps) {
                        Log.e("zbv", "id=" + person.id + ";firstName=" + person.firstName + ";lastName=" + person.lastName);
                    }
    
                }
            }).start();

    三、Android Sqlite:

    1、创建表的字段类:

    package com.zbv.newdesttop.database;
    
    import android.provider.BaseColumns;
    
    /**
     * author: qzx
     * Date: 2019/3/1 16:40
     */
    public final class SqliteTables {
        private SqliteTables() {
    
        }
    
        public static class Customer implements BaseColumns {
            public static final String TABLE_NAME = "customer";
            public static final String COLUME_ONE = "name";
            public static final String COLUME_TWO = "address";
        }
    }
    

    2、Sqlite的Helpr类:

    package com.zbv.newdesttop.database;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    /**
     * author: qzx
     * Date: 2019/2/28 14:35
     * <p>
     * sqlite本地数据库保存应用数据
     */
    public class ZBVSqliteHelper extends SQLiteOpenHelper {
    
        // If you change the database schema, you must increment the database version.
        public static final int DATABASE_VERSION = 1;
        public static final String DATABASE_NAME = "sqlite.db";
    
        //主键自增
        private static final String SQL_CREATE_ENTRIES =
                "CREATE TABLE " + SqliteTables.Customer.TABLE_NAME + " (" +
                        SqliteTables.Customer._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                        SqliteTables.Customer.COLUME_ONE + " TEXT," +
                        SqliteTables.Customer.COLUME_TWO + " TEXT)";
    
        private static final String SQL_DELETE_ENTRIES =
                "DROP TABLE IF EXISTS " + SqliteTables.Customer.TABLE_NAME;
    
        public ZBVSqliteHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
    
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQL_CREATE_ENTRIES);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // This database is only a cache for online data, so its upgrade policy is
            // to simply to discard the data and start over
            db.execSQL(SQL_DELETE_ENTRIES);
            onCreate(db);
        }
    }
    

    3、简单的增删改查工具类:

    package com.zbv.newdesttop.database;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.provider.BaseColumns;
    import android.util.Log;
    
    import com.zbv.newdesttop.Entities.Customer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * author: qzx
     * Date: 2019/2/28 16:35
     * <p>
     * sqlite数据库操作,增删改查
     */
    public class ZBVSqliteOperate {
    
        public static ZBVSqliteOperate zbvSqliteOperate = null;
    
        private ZBVSqliteHelper dbHelper;
    
        private ZBVSqliteOperate(Context context) {
            dbHelper = new ZBVSqliteHelper(context);
        }
    
        public static ZBVSqliteOperate getInstance(Context context) {
            if (zbvSqliteOperate == null) {
                synchronized (ZBVSqliteOperate.class) {
                    if (zbvSqliteOperate == null) {
                        zbvSqliteOperate = new ZBVSqliteOperate(context);
                    }
                }
            }
            return zbvSqliteOperate;
        }
    
        public void insert(Customer customer) {
            // Gets the data repository in write mode
            SQLiteDatabase database = dbHelper.getWritableDatabase();
    
            // Create a new map of values, where column names are the keys
            ContentValues values = new ContentValues();
            values.put(SqliteTables.Customer.COLUME_ONE, customer.getName());
            values.put(SqliteTables.Customer.COLUME_TWO, customer.getAddress());
    
            //第二个参数:If you specify null, like in this code sample, the framework does not insert a row when there are no values.
            long newRowId = database.insert(SqliteTables.Customer.TABLE_NAME, null, values);
        }
    
        public void delete(String column, String columnValue) {
            SQLiteDatabase db = dbHelper.getReadableDatabase();
            // Define 'where' part of query.
            String selection = column + " LIKE ?";
            // Specify arguments in placeholder order.
            String[] selectionArgs = {columnValue};
            // Issue SQL statement.
            int deletedRows = db.delete(SqliteTables.Customer.TABLE_NAME, selection, selectionArgs);
        }
    
        public void update(String column, String updateValue) {
            SQLiteDatabase db = dbHelper.getWritableDatabase();
    
            // New value for one column
            String title = "MyNewTitle";
            ContentValues values = new ContentValues();
            values.put(column, title);
    
            // Which row to update, based on the title
            String selection = column + " LIKE ?";
            String[] selectionArgs = {updateValue};
    
            int count = db.update(
                    SqliteTables.Customer.TABLE_NAME,
                    values,
                    selection,
                    selectionArgs);
        }
    
        public void query() {
            SQLiteDatabase db = dbHelper.getReadableDatabase();
    
            // Define a projection that specifies which columns from the database
            // you will actually use after this query.
            String[] projection = {
                    BaseColumns._ID,
                    SqliteTables.Customer.COLUME_ONE,
                    SqliteTables.Customer.COLUME_TWO
            };
    
            // Filter results WHERE "title" = 'My Title'
            String selection = SqliteTables.Customer.COLUME_ONE + " = ?";
            String[] selectionArgs = {"七子笑"};
    
            // How you want the results sorted in the resulting Cursor
            String sortOrder =
                    SqliteTables.Customer.COLUME_ONE + " DESC";
    
            Cursor cursor = db.query(
                    SqliteTables.Customer.TABLE_NAME,   // The table to query
                    projection,             // The array of columns to return (pass null to get all)
                    selection,              // The columns for the WHERE clause
                    selectionArgs,          // The values for the WHERE clause
                    null,                   // don't group the rows
                    null,                   // don't filter by row groups
                    sortOrder               // The sort order
            );
    
            List itemIds = new ArrayList<>();
            while (cursor.moveToNext()) {
                long itemId = cursor.getLong(
                        cursor.getColumnIndexOrThrow(SqliteTables.Customer._ID));
                Log.e("zbv", "itemId=" + itemId);
                itemIds.add(itemId);
            }
            cursor.close();
        }
    
        /**
         * 关闭数据库
         */
        public void closeDB() {
            //Since getWritableDatabase() and getReadableDatabase() are expensive to call when the database is closed,
            // you should leave your database connection open for as long as you possibly need to access it
            if (dbHelper != null) {
                dbHelper.close();
            }
        }
    
    
    }
    

     

    展开全文
  • 在项目开发过程中,涉及到存储,一般都用都SQlite,GreenDao是新出现的数据库,是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便 ...

    1.GreenDao介绍
    在项目开发过程中,涉及到存储,一般都用都SQlite,GreenDao是新出现的数据库,是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便
    如图所示:
    在这里插入图片描述
    2.GreenDao的优势
    1.性能高,号称Android最快的关系型数据库
    2.内存占用小
    3.库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
    4.支持数据库加密 greendao支持SQLCipher进行数据库加密 有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数据库加密实战
    5.简洁易用的API
    3.项目地址
    github:https://github.com/greenrobot/greenDAO
    4.GreenDao的使用
    1.添加依赖库
    在这里插入图片描述
    2.建立映射类
    在这里插入图片描述
    3.数据库管理类DBManager
    private DaoMaster.DevOpenHelper openHelper;
    private Context context;

    public DBManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }
    
    /**
     * 获取单例引用
     *
     * @param context
     * @return
     */
    public static DBManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (DBManager.class) {
                if (mInstance == null) {
                    mInstance = new DBManager(context);
                }
            }
        }
        return mInstance;
    }
    

    }

    4.数据库读取
    private SQLiteDatabase getReadableDatabase() {
    if (openHelper == null) {
    openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }
    SQLiteDatabase db = openHelper.getReadableDatabase();
    return db;
    }
    5
    .数据库存储

    private SQLiteDatabase getWritableDatabase() {
    if (openHelper == null) {
    openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db;
    }

    6.数据库插入
    public void insertUser(User user) {
    DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
    DaoSession daoSession = daoMaster.newSession();
    UserDao userDao = daoSession.getUserDao();
    userDao.insert(user);
    }

    7.数据库删除
    public void deleteUser(User user) {
    DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
    DaoSession daoSession = daoMaster.newSession();
    UserDao userDao = daoSession.getUserDao();
    userDao.delete(user);
    }
    8.查询数据库
    /**
    * 查询用户列表
    */
    public List queryUserList() {
    DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
    DaoSession daoSession = daoMaster.newSession();
    UserDao userDao = daoSession.getUserDao();
    QueryBuilder qb = userDao.queryBuilder();
    List list = qb.list();
    return list;
    }

    /**
     * 查询用户列表
     */
    public List<User> queryUserList(int age) {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        QueryBuilder<User> qb = userDao.queryBuilder();
        qb.where(UserDao.Properties.Age.gt(age)).orderAsc(UserDao.Properties.Age);
        List<User> list = qb.list();
        return list;
    }
    
    展开全文
  • android图片数据库存储 数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎...

    Android 数据库存取图片

    分类: android 8153人阅读 评论(1) 收藏 举报
    数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细介绍数据库存取图片的方法:

    一、数据库创建和存取方法:

    在数据库创建时,图片字段的数据类型存储为 BLOB数据库插入操作
    public void onCreate(SQLiteDatabase db)
    {
    String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) ";
    db.execSQL(sql);
    }

    将图片一字节形式存储数据库读取操作
    public long insert(byte[] img) 
    {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(IMAGE, img);
    long result = db.insert(TB_NAME, null, cv);
    return result;
    }


    得到的图片是Bitmap类型,参数position 点击图片在ListView、GridView等内的位置 ,可根据需要编写代码二
    public Bitmap getBmp(int position) 
    {
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = select(TB_NAME);
    cursor.moveToPosition(position);
    byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE));
    Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);
    return bmpout;
    }

    二、将图片转化为 byte[]//参数id为图片资源 (R.drawable.img)
    public byte[] img(int id)
    {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
    return baos.toByteArray();

    }

    转载请注明出处:http://blog.csdn.net/zjbpku/article/details/8877524

    展开全文
  • 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite---->OrmLite---->GreenDao GreenDao 介绍: greenDAO是...
  • 请问数据库 应该怎样保存 通过网络请求得到数据库图片字段内容后 又该如何 设置到 布局xml文件的 imageview 中 让其在android端运行后访问 显示图片
  • 老师要让我们做个小app,像商城一样,需要用到数据库,但是图片怎么弄,我们还没有学到网络的部分,数据库只能在本地的,把图片存储到哪里,然后怎么取出来
  • Android 数据库存图片

    2017-10-27 15:45:40
    Android数据库存储图片
  • java+mysql实现保存图片到数据库,以及读取数据库存储图片 </h1> <div class="clear"></div> <div class="postBody"> 一:建表   二:获取数据库连接 1:导入mysql的驱动jar...
  • * 将图片存放入数据库 * 从image view中获取图片源bitmap,转为二进制数组存储 * @param view */ public void saveToDatabase(View view){ imageView.setDrawingCacheEnabled(true); Bitmap bitmap = ...
  • android sqlite 存储图片

    千次阅读 2014-11-25 11:20:13
    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...
  • Androidsqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.getWidth()*bitmap.getHeight()*4; ByteArrayOutputStream out = new ...
  • 最近做毕业设计时需要做做个上传图片的demo,所以写了此段代码。
  • android的开发中会遇到这么一种需求,就是把图片存储到本地,每次加载的时候通过保存的图片的名称加载图片,或者利用请求到的/存储数据库存储的名称去加载图片 。开始我把数据放在了assets中,开始我发现这种方法...
  • 主要介绍了android创建数据库,保存图片数据库再从数据库图片的方法,大家参考使用吧
  • Android数据库储存图标资源的方法 问题: 项目中需要存储图标资源,若数据库中直接存储图标资源id(R.mipmap.icon)显然是有风险的做法。因为每次编译应用程序时会自动生成R文件,所以每次启动时,图片资源id都...
  • Android数据库中的创建,图片的存、取得
  • Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...
  • Android 数据库框架ormlite 使用精要

    万次阅读 2015-06-02 10:10:50
    Android 数据库框架ormlite 使用精要前言本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率。ormlite是什么?首先...
  • Android用LitePal操作数据库存取图片

    千次阅读 2017-08-02 19:09:08
    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,572
精华内容 13,028
关键字:

android数据库存储图片