android 在SdCard上创建数据库

数据库管理类中使用到的是自定义的Context,而非app的上下文对象:

/**
 * 用于支持对存储在SD卡上的数据库的访问
 **/
public class DbContext extends ContextWrapper {

	/**
	 * 构造函数
	 *
	 * @param base
	 *            上下文环境
	 */
	public DbContext(Context base) {
		super(base);
	}

	/**
	 * 获得数据库路径,如果不存在,则创建对象对象
	 *
	 * @param name
	 * @param mode
	 * @param factory
	 */
	@Override
	public File getDatabasePath(String name) {
		// 判断是否存在sd卡
		boolean sdExist = android.os.Environment.MEDIA_MOUNTED
				.equals(android.os.Environment.getExternalStorageState());
		if (!sdExist) {// 如果不存在,
			Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
			return null;
		} else {// 如果存在
				// 获取sd卡路径
			String dbDir = android.os.Environment.getExternalStorageDirectory()
					.getAbsolutePath();
			dbDir += "/database";// 数据库所在目录
			String dbPath = dbDir + "/" + name;// 数据库路径
			// 判断目录是否存在,不存在则创建该目录
			File dirFile = new File(dbDir);
			if (!dirFile.exists())
				dirFile.mkdirs();

			// 数据库文件是否创建成功
			boolean isFileCreateSuccess = false;
			// 判断文件是否存在,不存在则创建该文件
			File dbFile = new File(dbPath);
			if (!dbFile.exists()) {
				try {
					isFileCreateSuccess = dbFile.createNewFile();// 创建文件
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} else
				isFileCreateSuccess = true;

			// 返回数据库文件对象
			if (isFileCreateSuccess)
				return dbFile;
			else
				return null;
		}
	}

	/**
	 * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
	 *
	 * @param name
	 * @param mode
	 * @param factory
	 */
	@Override
	public SQLiteDatabase openOrCreateDatabase(String name, int mode,
			SQLiteDatabase.CursorFactory factory) {
		SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
				getDatabasePath(name), null);
		return result;
	}

	/**
	 * Android 4.0会调用此方法获取数据库。
	 *
	 * @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String,
	 *      int, android.database.sqlite.SQLiteDatabase.CursorFactory,
	 *      android.database.DatabaseErrorHandler)
	 * @param name
	 * @param mode
	 * @param factory
	 * @param errorHandler
	 */
	@Override
	public SQLiteDatabase openOrCreateDatabase(String name, int mode,
			CursorFactory factory, DatabaseErrorHandler errorHandler) {
		SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
				getDatabasePath(name), null);
		return result;
	}
}
时间: 2024-10-12 09:31:31

android 在SdCard上创建数据库的相关文章

Android中在sdcard上创建文件夹

//在SD卡上创建一个文件夹    public void createSDCardDir(){     if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){            // 创建一个文件夹对象,赋值为外部存储器的目录             File sdcardDir =Environment.getExternalStorageDirectory();           //得

Android 获取SDCard上图片和视频的缩略图

获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.ThumbnailUtils; import android.os.Bundle; import android.os.Environment; import an

android在myeclipse上创建的项目各种报错

这几天被android弄得头疼死了.差不多把电脑弄了个遍. 先是离线安装ADT,下载ADT,然后配置,但是因为ADT与MyEclipse冲突.所以直接不要再myeclipse下弄Android的环境了. 直接用下面的地址下载,adt-bundle-windows-x86_64-20140702. 下载ADT Bundle :http://tools.android-studio.org/index.php/adt-bundle-plugin 下载好解压,直接就可以用了.不要再因为有错浪费时间了,

【Android】读取sdcard上的图片

Android读取sdcard上的图片是很easy的事情,以下用一个样例来说明这个问题. 首先,在sdcard上有一张已经准备好的img25.jpg 以下,须要做的是把这张图片读取到app中显示. 做到例如以下的效果: 1.首先你要在AndroidManifest.xml申请读取sdcard的权限,增加一条语句之后,AndroidManifest.xml例如以下: <?xml version="1.0" encoding="utf-8"? > <m

Global Azure上创建、配置、管理SQL Server信息

近期写了很多关于Azure的相关的文档,今天忙完介绍一下,如何在Windows Azure上配置和管理SQL Server信息:我们今天的实验还是以Global Azure来操作:其实在Windows Azure上的SQL Server结构跟本地差不多,只是在Azure上创建的SQL Server数据不会具有系统默认的管理员权限:比如创建数据库的时候需要指定数据库的管理员信息:不能使用sa做为管理员账户:具体就不多介绍了,具体见下: 我们首先单击SQL 数据库---添加 因为我们环境内没有创建过

Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)

系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe AIR中使用Flex连接Sqlite数据库(3)(查询) Adobe AIR中使用Flex连接Sqlite数据库(4)(事务) Flex,Fms3相关文章索引 Fms3和Flex打造在线多人视频会议和视频聊天(附原代码) 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))

Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍

创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上创建数据库结构 from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name="名称") address = models.Ch

Android入门(十)SQLite创建升级数据库

原文链接:http://www.orlion.ga/603/ 一.创建数据库 Android为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, 借助这个类就可以非常简单地对数据库进行创建和升级. SQLiteOpenHelper是一个抽象类,其中有两个抽象方法分别是onCreate()和onUpgrade(),分别在这两个方法中实现创建和升级数据库的逻辑 SQLiteOpenHelper还有两个十分重要的实例方法,getReadableDatabase(

打造android ORM框架opendroid(二)——自动创建数据库

在上一篇博客<打造android ORM框架opendroid(一)--ORM框架的使用>中相信你已经了解了opendroid的使用,那么从这篇博客开始,我们正式进入opendroid的源码分析,打造一款自己的ORM框架! 在正式开始之前,你需要保证手里有一份opendroid的源码,如果还没下载opendroid,请到http://git.oschina.net/qibin/OpenDroid 下载opendroid的源码. 任何数据库操作都是从创建数据库开始的,今天我们就来看看opendr