SQL-android uri的使用(转载)

今天在操作android的时候,用到了数据库的访问,就在网上学习了一下关于数据库的知识。其中访问数据库就是通过uri进行的,所以这里总结下android uri的应用。

以下内容参考http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html

通用资源标志符(Universal Resource Identifier, 简称"URI")。

  Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。

  URI一般由三部分组成:

    访问资源的命名机制。

    存放资源的主机名。

    资源自身的名称,由路径表示。

  Android的Uri由以下三部分组成: "content://"、数据的路径、标示ID(可选)

  举些例子,如:

    所有联系人的Uri: content://contacts/people

    某个联系人的Uri: content://contacts/people/5

    所有图片Uri: content://media/external

    某个图片的Uri:content://media/external/images/media/4

我们来看一下android是如何管理多媒体文件(音频、视频、图片)的信息。通过DDMS,我们在/data/data/com.android.providers.media下找到数据库文件

external.db  打开 images 列表

具体操作如下

[email protected]_Y100:/data/data # cd com.android.providers.media
[email protected]_Y100:/data/data/com.android.providers.media # ls
cache
databases
lib
shared_prefs
databases/                                                                    <
[email protected]_Y100:/data/data/com.android.providers.media/databases # ls
external.db
external.db-shm
external.db-wal
internal.db
internal.db-shm
internal.db-wal
e3 external.db                                                                <
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
album_art              audio_genres           log
album_info             audio_genres_map       search
albums                 audio_genres_map_noid  searchhelpertitle
android_metadata       audio_meta             thumbnails
artist_info            audio_playlists        video
artists                audio_playlists_map    videothumbnails
artists_albums_map     files
audio                  images
sqlite> select * from images;
84|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg|1207033|IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647|1420078609|1420078609||||||1420078607883|0|2289287690547999733|1509922574|Camera|1872|3328|||||||||||0|0|-1|0|0|0|0|0|0|0
sqlite> .schema images
CREATE VIEW images AS SELECT _id,_data,_size,_display_name,mime_type,title,date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,height,is_drm,drm_content_uri,drm_offset,drm_dataLen,drm_rights_issuer,drm_content_name,drm_content_description,drm_content_vendor,drm_icon_uri,drm_method,stereo_type,mpo_type,convergence,group_id,group_index,focus_value_high,focus_value_low,is_best_shot,group_count,is_mtk_3d FROM files WHERE media_type=1;
sqlite> 

我们把表格提取出来,如下

_id,_data,_size,_display_name,mime_type,title,date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,height,is_drm,drm_content_uri,drm_offset,drm_dataLen,drm_rights_issuer,drm_content_name,drm_content_description,drm_content_vendor,drm_icon_uri,drm_method,stereo_type,mpo_type,convergence,group_id,group_index,focus_value_high,focus_value_low,is_best_shot,group_count,is_mtk_3d FROM files WHERE media_type=1;

84|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg|1207033|IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647|1420078609|1420078609||||||1420078607883|0|2289287690547999733|1509922574|Camera|1872|3328|||||||||||0|0|-1|0|0|0|0|0|0|0 

可以看到文件路径(_data)和Uri的标示ID(_id)的对应关系。

  代码中使用

   1.从URI获得文件路径

     string  myImageUrl = "content://media/external/images/media/***";

//字符串转化为uri
      Uri uri = Uri.parse(myImageUrl);
//这个好像是访问数据库必须的,至于proj有什么用,暂时不知道
     String[] proj = { MediaStore.Images.Media.DATA };
      Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null);
//获得所在列的id
      int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
      actualimagecursor.moveToFirst();
//得到id对应的路径
      String img_path = actualimagecursor.getString(actual_image_column_index);
     File file = new File(img_path);
     Uri fileUri = Uri.fromFile(file);

  2.由文件路径得到URI

  

            Uri mUri = Uri.parse("content://media/external/images/media");
          Uri mImageUri = null;

            Cursor cursor = managedQuery(
                      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
                      null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
              cursor.moveToFirst();

              while (!cursor.isAfterLast()) {
                 String data = cursor.getString(cursor
                         .getColumnIndex(MediaStore.MediaColumns.DATA));
                 if (picPath.equals(data)) {
                     int ringtoneID = cursor.getInt(cursor
                             .getColumnIndex(MediaStore.MediaColumns._ID));
                   mImageUri = Uri.withAppendedPath(mUri, ""
                             + ringtoneID);
                     break;
                }
                 cursor.moveToNext();
             }

下面附上自己用到的一个实例,它多少反映了数据库的操作吧

代码如下

 } else if ("downloads".equals(mFileUri.getAuthority())) {
                    String[] proj={
                        "_data",
                        "mimetype"};
                    Cursor cursor = managedQuery( mFileUri,
                        proj,
                        null,
                        null,
                        null);
                    if ( null == cursor ) {
                        return 2;
                    }   

                    int pathColumnId = cursor.getColumnIndexOrThrow("_data");
                    int mimeColumnId = cursor.getColumnIndexOrThrow("mimetype");
                    if(!cursor.moveToFirst()){
                        return 2;
                    }
                     mFilePath = cursor.getString(pathColumnId);
                     mMimeType = cursor.getString(mimeColumnId);
                    android.util.Log.e("zhangshuli", "mFilePath==更改3"+mFilePath+mMimeType);
                }
            }   

打印结果

mFilePath==更改3/storage/sdcard0/Download/IMG_20150402_124553.jpgimage/jpeg
时间: 2024-11-07 00:30:29

SQL-android uri的使用(转载)的相关文章

SQL Server创建存储过程(转载)

什么是存储过程? q       存储过程(procedure)类似于C语言中的函数 q       用来执行管理任务或应用复杂的业务规则 q       存储过程可以带参数,也可以返回结果 q       存储过程可以包含数据操纵语句.变量.逻辑 控制语句等 存储过程的优点 (1)执行速度快. 存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译. 存储在数据库服务器,性能高. (2)允许模块化设计. 只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储

android Uri获取真实路径转换成File的方法

Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = managedQuery(uri,proj,null,null,null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actua

SQL SERVER的数据类型(转载)

SQL SERVER的数据类型 1.SQL SERVER的数据类型 数据类型是数据的一种属性,表示数据所表示信息的类型.任何一种计算机语言都定义了自己的数据类型.当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同.SQLServer 提供了 25 种数据类型: ·Binary [(n)] ·Varbinary [(n)] ·Char [(n)] ·Varchar[(n)] ·Nchar[(n)] ·Nvarchar[(n)] ·Datetime ·Smallda

android uri , file , string 互转

1:android Uri 介绍 http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html 2:File 转成Uri <span style="font-size:18px;"> File file = null; Uri uri = Uri.fromFile(file)</span> android uri , file , string 互转

Android 设计原则【转载】

原文地址 本文内容 吸引我的眼球 简化我的生活 让我眼前一亮 在使用过大量 Android APP 后,你会发现,遵循了下面这些原则的 APP 将会有更好的用户体验. 我们知道,往往国企的那些软件,都很难用,比如银行手机客户端,操作繁杂.界面难看.功能有限--基本上,那就是糊弄领导的东西,完全不是给用户用的,农业银行手机客户端,在我所用过的所有银行手机客户端中算是不错的了(而且,转账没有手续费),操作有点不便,尤其是"返回"操作,有种"不知身在何处"的感觉:而建设银

如何使用JS来检测游览器是什么类型,或android是什么版本号- 转载

var brower = { versions:function(){ var u = window.navigator.userAgent; var num ; if(u.indexOf('Trident') > -1){ //IE return "IE"; }else if(u.indexOf('Presto') > -1){ //opera return "Opera"; }else if(u.indexOf('Gecko') > -1 &a

Android Uri、UriMatcher、ContentUris详解

1.Uri 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频片段等都可以用Uri来表示. URI一般由三部分组成: 访问资源的命名机制. 存放资源的主机名. 资源自身的名称,由路径表示. Android的Uri由以下三部分组成: "content://".数据的路径.标示ID(可选) 举些例子,如: 所有联系人的Uri: content://con

关于Android基本架构(转载)

本文转载自http://www.cnblogs.com/lijunamneg/archive/2013/01/18/2866953.html Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上.Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86.MAC等体系结构的机器上同样可

Android URI简单介绍

就Android平台而言,URI主要分三个部分:scheme, authority and path.当中authority又分为host和port.格式例如以下: scheme://host:port/path 举个实际的样例: content://com.example.project:200/folder/subfolder/etc \---------/  \---------------------------/ \---/ \--------------------------/ s