Android数据库查询

这篇具有很好参考价值的文章主要介绍了Android数据库查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.查询图片

 Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projImage = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.SIZE, MediaStore.Images.Media.DISPLAY_NAME};
        Cursor mCursor = context.getContentResolver().query(mImageUri, projImage, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED + " desc");
        if (mCursor != null) {
            while (mCursor.moveToNext()) {
                // 获取图片的路径
                String path = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
                int size = mCursor.getInt(mCursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE)) / 1024;//单位kb
                String displayName = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
                long id = mCursor.getLong(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
                Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
            }
            mCursor.close();
        }

2.查询视频

 Uri mVideoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        String[] proj = {MediaStore.Video.Thumbnails._ID, MediaStore.Video.Thumbnails.DATA, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.DATE_MODIFIED};
        Cursor mVideoCursor = context.getContentResolver().query(mVideoUri, proj, null, null, MediaStore.Video.Media.DATE_MODIFIED + " desc");
        if (mVideoCursor != null) {
            while (mVideoCursor.moveToNext()) {
                // 获取视频的路径
                int videoId = mVideoCursor.getInt(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                String path = mVideoCursor.getString(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                int duration = mVideoCursor.getInt(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
                long size = mVideoCursor.getLong(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE)) / 1024; //单位kb
                if (size < 0) {
                    //某些设备获取size<0,直接计算
//                               Log.e("dml","this video size < 0 " + path);
                    size = new File(path).length() / 1024;
                }
                if (limitSize <= 0 ||  size <= limitSize ){//限制在50MB以内的视频才显示 (当限制的值不合理就全部显示)
                    String displayName = mVideoCursor.getString(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME));
                    long modifyTime = mVideoCursor.getLong(mVideoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_MODIFIED));//暂未用到
                }
            }
            mVideoCursor.close();
        }

3.查询音频

 Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,
                                null, MediaStore.Audio.AudioColumns.IS_MUSIC);
                        if (cursor != null) {
                            while (cursor.moveToNext()) {
                                String song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
                                String singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
                                String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));

                                long id= cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
                                Uri uri  =  ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);;

                                long duration = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
                                long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
                            }
                            // 释放资源
                            cursor.close();

4.根据文件路径返回Uri

(1)

File file=new File(filePath);
MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null, new MediaScannerConnection.MediaScannerConnectionClient() {
                    @Override
                    public void onMediaScannerConnected() {
                    }

                    @Override
                    public void onScanCompleted(String path, Uri uri) {

                    }
                });

(2)备注代码里返回的视频的Uri,要返回音频或者图片的Uri要在查询和获取Uri里改为相应的URI查询。

MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
 /**
     * 根据文件路径转uri
     * @param context
     * @param filePath
     * @return
     */
    public static Uri filePathToUri(Context context,String filePath){
        Uri uri=null;
        try {
            Cursor cursor=context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI
                    ,null, MediaStore.Video.Media.DATA + "=?"
                    ,new String[]{filePath},null);
            if (cursor!=null){
                while (cursor.moveToNext()) {
                    String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                    long id= cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                     uri= ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
//                    Uri idUri=Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,String.valueOf(id));
                     break;
                }
                cursor.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return uri;
    }

5.查询特定后缀名的文件("pdf", "txt", "doc", "docx", "xlsx", "xls", "ppt", "pptx", "epub")

(1)根据后缀名来查询(存在的问题,如果文件夹也是这样的命名也会被查询到,所以要判断是否是文件还是文件夹操作,查300个文件大概要1秒到2秒之间),这个是有点模糊查询,耗时会比较长,文件越多耗时越长。

private void quert(Context context) {
        long startTime = System.currentTimeMillis();

        String[] projection = new String[]{MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.DATA,
                MediaStore.Files.FileColumns.SIZE,
                MediaStore.Files.FileColumns.MIME_TYPE
        };

        StringBuilder stringBuilder = new StringBuilder();
        String[] queryFileTypes={"%.pdf","%.txt","%.doc","%.docx","%.xlsx","%.xls","%.ppt","%.pptx","%.epub"};
        for (int i = 0; i < queryFileTypes.length; i++) {
            stringBuilder.append(MediaStore.Files.FileColumns.DATA + " like ? " );
            if (i < queryFileTypes.length - 1) {
                stringBuilder.append(" OR ");
            }

        }
        Cursor cursor = context.getContentResolver().query(
                Uri.parse("content://media/external/file"),
                projection,
                stringBuilder.toString(),
                queryFileTypes,
                null);

        if (cursor!=null){
            while (cursor.moveToNext()){
                String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
            }
            LogUtils.e((System.currentTimeMillis() - startTime)+"  qwert end === "+cursor.getCount());
            cursor.close();
        }
    }

(2)根据文件类型查询(使用文件类型查询耗时比后缀名查询的速度快,查询300多个文件耗时大约在300~400ms)

String[] queryFileTypes = {"application/pdf", "text/plain", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/epub+zip"};
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < queryFileTypes.length; i++) {
            stringBuilder.append(MediaStore.Files.FileColumns.MIME_TYPE + " = '" + queryFileTypes[i] + "'");
            if (i < queryFileTypes.length - 1) {
                stringBuilder.append(" OR ");
            }

        }
        files.addAll(queryFiles(context, stringBuilder.toString()));




 private void queryFiles(Context context, String queryFileType) {
        List<AirAuraBean> files = new ArrayList<>();
        String[] projection = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.SIZE, MediaStore.Files.FileColumns.MIME_TYPE};
        //使用 MediaStore.Files.getContentUri("external")获取的URI同样是content://media/external/file

        Cursor cursor = context.getContentResolver().query(Uri.parse("content://media/external/file"), projection, queryFileType, null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {

                int idindex = cursor.getColumnIndex(MediaStore.Files.FileColumns._ID);
                int dataindex = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
                int sizeindex = cursor.getColumnIndex(MediaStore.Files.FileColumns.SIZE);
                do {
                    String id = cursor.getString(idindex);
                    String path = cursor.getString(dataindex);
                    String size = cursor.getString(sizeindex);
//                    String type = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE));


                } while (cursor.moveToNext());
            }
            cursor.close();
        }
    
     
    }

如果将查询放到for循环中一个一个的查询,会比组合条件查询更慢。(因为就算没有文件,getContentResolver().query查询也会耗时30~50ms之间的,所以合并查询更省时)文章来源地址https://www.toymoban.com/news/detail-596639.html

到了这里,关于Android数据库查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android+阿里云数据库,实现安卓云数据库

    目录 阿里云部分 Adnroid配置部分 Android代码部分 效果 在阿里云中查看已保存的数据 进入阿里云首页,这里选择的是 云数据库RDS MySQL版 。 购买完成后,点击 控制台 。 点击 “云数据库RDS版” 点击 实例列表 点击 实例ID 接下来是 设置白名单 。 测试的话,设置为 0.0.0.0/0 就可

    2024年02月05日
    浏览(46)
  • Android studio 连接SQLite数据库 +创建数据库+创建数据库表

    Android studio 之数据库的使用 连接创建SQLite 大家好,欢迎来到寒依。 相信看啦我的教程 当老师问你在学习Android studio 数据库使用过程中遇到什么困难,分享一下你的感悟和解决方法 的时候,你可以直接大胆的说出来: “老师我没有遇到问题,看啦寒依的教程 畅行无阻” 我

    2024年02月02日
    浏览(55)
  • Android studio引入外部SQLite数据库,获取数据库列表数据

    准备好Android studio和一个创建管理数据库的软件,推荐SQLite Expert Professional或者Navicat Premium。这里以SQLite Expert Professional为例。 1.穿件sqlite数据库,按照自己的项目要求定义数据库和相应的数据表 1.在main目录下创建assets文件,将准备好的sqlite数据库文件放入这个目录下 解释:

    2024年02月08日
    浏览(58)
  • Android 数据库增删改查

    1、activity_main.xml 页面布局 代码 2、MainActivity.java 通过点击不同的按钮,进行不同的增删改查操作 3、UserDao.java 包含对数据库的增删改查方法 4、User.java 实体类对应着user表中的字段 5、SQLiteOpenHelper.java 创建表,更新表方法

    2023年04月08日
    浏览(32)
  • Android 数据库之GreenDAO

    GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不再需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化,最小的内存开销 、依赖体积小 同时还是支持 数据库加密。 greenDAO 官网地址

    2024年02月13日
    浏览(34)
  • Android之SQLite数据库使用

    SQLite是Android系统集成的一个轻量级的数据库。 Android提供了 SQLiteDatabase代表一个数据库 (底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。 Android为了让我们能够更加方便地管理数据库,

    2024年02月16日
    浏览(51)
  • Android 进阶 1、sqlite数据库

    在我们学会了Android的基本使用之后就需要往高处发展了,毕竟水往高处流,很多时候我们学习一门技术感觉没有收获都是因为还没到那个层次,当你一步步往上走的时候就会渐渐发现自己收获的越来越多,进步也就会越来越快了,废话不多说,回到正题; 1、认识数据库 安卓

    2024年02月10日
    浏览(48)
  • 【Android】Room数据库的使用

    Room 是在 SQLite 的基础上推出的 Android 库,它是 Google 官方对数据库操作的推荐方式。使用 Room 可以更方便、高效地操作 SQLite 数据库。 添加依赖 在使用 Room 之前,需要在项目中添加 Room 相关的依赖。在 build.gradle 文件中添加以下依赖: 在上面的依赖中,我们添加了 room-runti

    2024年02月09日
    浏览(49)
  • Android Studio 学习记录-数据库

    目录 SQL的基本语法 1.数据定义语言 2.数据操纵语言 数据库管理器 SQLiteDatabase 数据库帮助器 SQLiteOpenHelper 优化记住密码功能         本文介绍Android的数据库存储方式-SQLite的使用方法,包括:SQLite用到了哪些SQL语法,如何使用数据库管理器操纵SQLite,如何使用数据库帮助器

    2024年02月07日
    浏览(53)
  • Android 连接MySql数据库步骤

    1.首先我们需要导入mysql驱动jar包下载地址:   在android studio的build.gradle中插入 } 2、建立JDBCutils类    分析:jdbc:mysql://192.168.43.215:3306/user\\\",\\\"root\\\",\\\"1234\\\"语句    1、jdbc:mysql://基本格式    2、192.168.43.215你当前连的网的Ipv4地址(可以在cmd命令窗口输入ipconfig命令,找到你连的网(

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包