引言

昨天写了一篇关于自定义控件的博客,结果访问量竟然直逼三百,而我之前费劲心力写的ndk的两篇博客竟然加起来不到60。没办法了,我也只能投其所好再给大家写点儿安卓原声的东西吧。已经想好了就写android的数据库。

android数据库应用

安卓数据库一般有两种应用方式

1-继承SqliteOperHelper.自己定义数据库
2-运用ContentResolver调用系统的数据库(如果其它应用开放接口的话也可以调用哟)

第一种方法说的不多,比较好理解,百度的资料也很多,我会在后面贴出代码,下面是第一种方法的程序运行结果。

下面讲解第二种数据库应用,
一般来说这种方法百分之九十九的情况都是去调用系统的数据库,除非你的应用做到了qq微信的级别才会考虑自己写接口供别人调用吧。
这里以系统的媒体数据库 的图片数据库为例进行讲解,为了方便讲解我导出了系统的数据库,可以看到系统 的数据库结构如下图

从这张图可以看出系统的媒体数据库分为外部媒体数据库,和内部媒体数据库,一般来说有几张内存卡就会有几个外部媒体数据库,我们主要讲解外部的媒体数据库。
从上图可以看出媒体数据库里面的表和视图加起来有十几张,看起来是不是眼花缭乱,无从下手,没关系我的目的就是治愈各位的眼花手残问题。经过我的研究发现,虽然表很多但是真正和图片数据库有关系的只有 images 和 files两张表(images是视图)而我们的这个例子就更好办了,因为我只用到了images这张视图。

.

打开images这张视图可以看到里面有很多字段,_id(图片的id),size(图片的尺寸),以及display_name, mimetype ,title,
尤其注意到了data这个字段没有,看着它的字符串的格式有没有明白什么,没错它就是我们图片在存储器中的路径,那么有了路径就不用我多说了吧,
相信各位都可以就此成功拿到图片。


这张图片是files的字段, 很多情况下我们需要将files和images两个表(以后姑且把视图也叫表了)一起联合使用,大家可以自己挖掘(友情提示mimetype是这两张表的重要联系纽带哟,有兴趣可以自己看看吗)。

下面我通过一张图来说好说数据库表与ContentProvider的关系!!!!理解这个非常重要,能够理解透这个你就可以像我一样不用百度查遍所以系统数据库表。
先看看下面这张图吧

丑爆了有没有,我自己都快被丑哭了,不过不影响我们分析解决问题

系统媒体数据库对应了图中的ContentProvider,而数据库里的表则对应了这个类里面的名字相同的内部类,由此可以推想是不是表里的字段就对应类里 的全局变量呢,不过还是不要想了,因为这个已经被我证实过了,各位只管放心去看便是。原理就是这样,只要各位同学真正明白个中道理就能像我一样活用数据库。
以上就是今天的全部内容,下面是代码时间

代码部分

普通数据库应用

package com.example.test;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class Database extends SQLiteOpenHelper{    private static final String DB_NAME = "class";    private static final int DB_VERSION = 1;    private static final String sql = "create table class (_id integer primary key autoincrement,name text not null,age integer not null)";    public Database(Context context, String name, CursorFactory factory,            int version) {        super(context, DB_NAME, null, DB_VERSION);        // TODO Auto-generated constructor stub    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub    }}

ContentProvider应用

package com.example.test;/** * 查询系统数据库的类 */import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.provider.MediaStore.Images;import android.provider.MediaStore.Images.Media;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class SystemDbActivity extends Activity implements OnClickListener {    private ContentResolver resolver;    private Button search;    private Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;    private ImageView image;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_system);        initData();        initView();        initListener();    }    private void initListener() {        // TODO Auto-generated method stub        search.setOnClickListener(this);    }    private void initData() {        // TODO Auto-generated method stub        // resolver = MediaStore.Images.Media.getContentUri()    }    private void initView() {        // TODO Auto-generated method stub        search = (Button) findViewById(R.id.btn_system);        image = (ImageView) findViewById(R.id.img_system);    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        switch (v.getId()) {        case R.id.btn_system:            // resolver.query(uri ,null , selection, selectionArgs, null);            try {                Uri uri2 = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;                Uri uri3 = MediaStore.getMediaScannerUri();                Cursor cursor = getContentResolver().query(uri2,                        new String[] { Images.Thumbnails.DATA }, null, null,                        null);                while (cursor.moveToNext()) {                    String data = cursor.getString(0);                    File file = new File(data);                    FileInputStream fis = new FileInputStream(file);                    Bitmap bitmap = BitmapFactory.decodeStream(fis);                    System.out.println(bitmap);                    image.setImageBitmap(bitmap);                }            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            break;        default:            break;        }    }}
package com.example.test;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class CustomDatabaseActivity extends Activity implements OnClickListener {    private EditText et_id,et_age,et_name,et_query_id;    private Button btn_query,btn_insert;    private TextView showInfo;    private SQLiteOpenHelper helper;    private SQLiteDatabase database;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_custom_db);        initData();        initView();        initListener();    }    private void initData() {        // TODO Auto-generated method stub        helper = new Database(this, "class", null, 1);        database = helper.getWritableDatabase();    }    private void initListener() {        // TODO Auto-generated method stub        btn_insert.setOnClickListener(this);        btn_query.setOnClickListener(this);    }    private void initView() {        // TODO Auto-generated method stub        et_name = (EditText) findViewById(R.id.et_name);        et_age = (EditText) findViewById(R.id.et_age);        et_id = (EditText) findViewById(R.id.et_id);        et_query_id = (EditText) findViewById(R.id.et_query_id);        btn_insert = (Button) findViewById(R.id.btn_insert_custom);        btn_query = (Button) findViewById(R.id.btn_query_custom);        showInfo = (TextView) findViewById(R.id.tv_showinfo);    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        switch (v.getId()) {        case R.id.btn_insert_custom:            ContentValues values = new ContentValues();            values.put("_id", Integer.parseInt(et_id.getText().toString()));            values.put("name", et_name.getText().toString());            values.put("age", Integer.parseInt(et_age.getText().toString()));            database.insert("class", null, values );            values.clear();            break;        case R.id.btn_query_custom:            int q_id = Integer.parseInt(et_query_id.getText().toString());            Cursor cursor = database.query("class", new String[]{"_id","name","age"}, "_id="+q_id,null, null, null, null);            int _id = 0;            int age = 0;            String name = null;            while (cursor.moveToNext()) {                _id = cursor.getInt(0);                name = cursor.getString(1);                age = cursor.getInt(2);            }            showInfo.setText("name : "+name +"--"+"age="+age+"--"+"_id="+_id);            break;        default:            break;        }    }}

联系我

QQ:1275054668
Email:pook216@163.com

更多相关文章

  1. Android(安卓)3D旋转动画——Rotate3dAnimation
  2. Android入门教程(三十二)------之SQLite分页表格
  3. ListView怎么处理大量的加载数据;比如有10万条数据,你在ListView怎
  4. Android(安卓)应用程序之间数据共享—ContentResolver
  5. android中Media Playback(媒体播放)
  6. Android中实现SQLite数据库CRUD操作的两种方式
  7. android视图学习---Android深入浅出之Surface[1]
  8. Android(安卓)控件架构
  9. 说说 Android(安卓)中的 SQLite 数据库

随机推荐

  1. Android Notification 详解,使用MediaPlay
  2. (转)Android内存管理机制之一:lowmemory k
  3. 开发者大会传递信号:Android开发者将越来
  4. 安卓Android开发视频教程大全50GB/安卓基
  5. android自定义adapter 滑动屏幕时 进度条
  6. Android中活动的生命周期
  7. 如何使用jdb调试android的java程序
  8. 【COCOS2DX-ANDROID-游戏开发之二五】 调
  9. 深度探索Android应用程序的基本原理
  10. TextView使用android:autoLink="web"但又