您的位置:首页 > 数据库

工作日志

2015-10-30 22:43 351 查看
     
一.green dao的使用

DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。

DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法。

XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素。

XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties。

如下一个实例初始化代码:

1

2

3

4

5
helper = 
new
 
DaoMaster.DevOpenHelper(
this
"notes-db"
null
);


db = helper.getWritableDatabase();


daoMaster = 
new
 
DaoMaster(db);


daoSession = daoMaster.newSession();


noteDao = daoSession.getNoteDao();


即:先创建了一个SQLiteOpenHelper并创建连接到一个具体数据库;再根据具体的datebase创建一个master对象用于;最后通过master创建一个数据库的会话操作。

    1.DaoMaster相当于sqlite中的DBHelper类,创建数据库,获取数据库的操作对象。他是里面包含了对DBHelper的操作

    2.这四个类都是自动生成的。
   

  四个文件的生成   

   public static void main(String[] args)
throws Exception {

    //第一个参数是数据库版本号,第二个参数是包名,即生成的Dao文件会在这个包下
    Schema schema =
new Schema(1,"com.onlybeyond.test.greendao");

    addUser(schema);//添加相应的表
   
new
DaoGenerator().generateAll(schema,"src/gen);//输出到相应的文件
   }  
   private static void addUser(Schema schema){

    Entity user = schema.addEntity("Publish");

    user.addIdProperty().autoincrement().primaryKey();

    user.addIntProperty("img").unique().notNull();

    user.addStringProperty("voice").notNull();
   }
 添加新表新加相应的add方法即可。
 每回新建表或者修改表的属性都得重新生成四类文件,当然也可以直接修改四类文件,但在没完全明白原理前,出错率会很高。

获取对象
   建一个类统一管理数据库操作
  
public class DBHelper {

    private static final String DB_NAME "medical.db";

    private static DaoMaster daoMaster;

    private static DaoSession daoSession;

    private static DaoMaster getDaoMaster(Context context){
       
if (daoMaster == null){
            DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, DB_NAMEnull);

            SQLiteDatabase db = openHelper.getWritableDatabase();

            daoMaster = new DaoMaster(db);

        }

        return daoMaster;

    }

    public static DaoSession getDaoSession(Context context){

        if (daoSession == null){

            if (daoMaster == null){

                daoMaster = getDaoMaster(context);

            }

            daoSession = daoMaster.newSession();

        }

        return daoSession;

    }

    // 通过得到的DaoSession,可以获取对相应表进行操作的Dao类;待数据库表确定后,数据库操作方法
    // 均写在此处,方便统一调用。
public  static long   addPublish(Context context,Publish publish){

      DaoSession daoSession=getDaoSession(context);

      PublishDao publishDao = daoSession.getPublishDao();

      long insert = publishDao.insert(publish);

      return  insert;

}
public static void deletePublish(Context context,Publish publish){

    DaoSession daoSession = getDaoSession(context);

    PublishDao publishDao = daoSession.getPublishDao();

    publishDao.delete(publish);

}
public static void updatePublish(Context context,Publish publish){

    DaoSession daoSession = getDaoSession(context);

    PublishDao publishDao = daoSession.getPublishDao();

    publishDao.update(publish);

}

public  static List<Publish> queryPublish(Context context,Publish publish,WhereCondition whereCondition,WhereCondition...whereConditions){

    DaoSession daoSession = getDaoSession(context);

    PublishDao publishDao = daoSession.getPublishDao();

    QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();

    return publishQueryBuilder.where(whereCondition,whereConditions).list();

}

public static Publish queryPublish(Context context){

    Publish publish=null;

    DaoSession daoSession = getDaoSession(context);

    PublishDao publishDao = daoSession.getPublishDao();

    QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();

   if(publishQueryBuilder!=null) {

       List<Publish> list = publishQueryBuilder.list();

       if (list != null && list.size() > 0) {

           publish = list.get(0);

       }

   }

    return publish;

}

  public static void  cleanAllPublish(Context context){

    DaoSession daoSession = getDaoSession(context);

    PublishDao publishDao = daoSession.getPublishDao();

     publishDao.deleteAll();
  }
}
  遇到问题:发布话题中包含多张图片
  解决方法:1.再建一张图片的表,然后进行关联
          2.用逗号进行分割
  选中方法:用逗号进行分割

二、获取视频的缩略图

 
/**
 * 获取视频的缩略图
 * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
 * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
 * @param videoPath <
ab81
/strong>视频的路径
 * [b]@param 
width 指定输出视频缩略图的宽度
 * @param height 指定输出视频缩略图的高度度
 * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。
 *            其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
 * @return 指定大小的视频缩略图
 */
public static Bitmap getVideoThumbnail(String videoPath, int width, int height,

                                 int kind) {

    Bitmap bitmap = null;

    // 获取视频的缩略图
    bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
    System.out.println("w"+bitmap.getWidth());

    System.out.println("h"+bitmap.getHeight());

    bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,

            ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

    return bitmap;

}

 

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息