今天在操作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 列表

具体操作如下

root@Aurora_Y100:/data/data # cd com.android.providers.media
root@Aurora_Y100:/data/data/com.android.providers.media # ls
cache
databases
lib
shared_prefs
databases/ <
root@Aurora_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. -- ::
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;
|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg||IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647||||||||||||Camera|||||||||||||||-|||||||
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=;
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=;

|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg||IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647||||||||||||Camera|||||||||||||||-||||||| 

可以看到文件路径(_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

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

  1. android uri , file , string 互转

    1:android Uri 介绍 http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html 2:File 转成Uri < ...

  2. Android性能优化文章转载

    今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...

  3. [Android Memory] Android Lint简介(转载)

    英文原文:http://tools.android.com/tips/lint  参照文章:http://blog.csdn.net/thl789/article/details/8037473 转载 ...

  4. Android(java)学习笔记162:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  5. SQL语句 DML,DDL,DCL(转载)

    数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT.DENY.REVOKE等语句,在默认状态下,只有 sysadmin.dbcreator.db_owner或d ...

  6. Android URI简单介绍

    就Android平台而言,URI主要分三个部分:scheme, authority and path.当中authority又分为host和port.格式例如以下: scheme://host:por ...

  7. Android URI简介

    就Android平台而言,URI主要分三个部分:scheme, authority and path.其中authority又分为host和port.格式如下:scheme://host:port/p ...

  8. Android 屏幕适配方案(转载)

    3.百分比的引入 1.引入 其实我们的解决方案,就是在项目中针对你所需要适配的手机屏幕的分辨率各自简历一个文件夹. 如下图: 然后我们根据一个基准,为基准的意思就是: 比如480*320的分辨率为基准 ...

  9. SQL Android

    SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少. 一般有以下几个关键步骤: 1.创建数据库 2.创建表 3.操作:增删改查 4.关闭数据库 5.删除表(非必选) SQLite ...

随机推荐

  1. 1.9 Python基础知识 - 数值运算

      一.数值运算 在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. 算术运算符 运算符 含义 说明 优先级 实例 ...

  2. ivms4200 远程桌面访问测试过程及问题汇总

    17.11.4 测试存储服务器配置后能否自动录像确认 10:34   4200客户端关闭 10:40  打开4200客户端软件 10:51   关机 10:56  开机,有提示出现,“防火墙阻止... ...

  3. [Usaco2009 Feb]Stock Market 股票市场 完全背包

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

  4. React开发实时聊天招聘工具 -第五章 需求分析

    Axios的使用 axios.get('/data') .then(res=>{ if(res.status==200) this.setState(data:res.data) })

  5. python之路:发附带文件的邮件

    发邮件的思路(借用第三方服务): 1.模拟服务器,其中有:服务器地址,发送者地址.发送者的密码 2.创建一个带附件的实例:1.创建一个massage 2.massage包括发送者的地址.接受者的地址. ...

  6. 今日SGU 5.16

    SGU 119 题意:给你N.A0.B0,然后问所有X.Y,若A0X+B0Y能被N整除,则AX+BY也能被N整除,求所有的A.B.(0<=A.B<N) 收获:枚举 因为a0x+b0y=k1 ...

  7. Windows系统的关机、休眠和睡眠状态究的区别

    原文:Windows系统的关机.休眠和睡眠状态究的区别 相信有些小伙伴跟我一样,对电脑的一些常用操作或名词不太熟悉,今天我们就简单来聊聊电脑的关机.休眠和睡眠状态究竟有何区别吧! 如果你在电脑左下角的 ...

  8. 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)

    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...

  9. Bounding Volume Hierarchy BVH in OpenCASCADE

    Bounding Volume Hierarchy BVH in OpenCASCADE eryar@163.com Abstract. Bounding Volume Hierarchy(BVH) ...

  10. Java程序猿的JavaScript学习笔记(6——面向对象模拟)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...