`

读取assets或者raw目录下的sqlite数据库

 
阅读更多
public class DbManager
{
	private static final int BUFFER_SIZE = 2046;
	public static final String DB_NAME = "school_out.db";
	public static final String DB_PATH = "/data"
			+ android.os.Environment.getDataDirectory().getAbsolutePath()
			+ "包名" + "/";
	public static final String DB_FILE = DB_PATH + DB_NAME;

	private Context mContext;
	private SQLiteDatabase database;

	public DbManager(Context context)
	{
		super();
		this.mContext = context;
	}

	public void openDatabase()
	{
		closeDatebase();
		database = openDateBase();
	}

	/**
	 * 
	 * <b>功能名:</b> 打开数据库 <br/>
	 * <b>功能描述:</b> <br/>
	 * <b>创建时间:</b> 2013-8-6 <br/>
	 * <b>修改时间:</b> 2013-8-6 <br/>
	 * 
	 * @return
	 */
	public SQLiteDatabase openDateBase()
	{
		File file = new File(DB_FILE);
		// 如果文件不存在,将 raw 下的db文件复制到 data/data下面
		if (!file.exists())
		{
			File filePath = new File(DB_PATH);
			if(!file.exists())
				filePath.mkdirs();
			
			// // 打开raw中得数据库文件,获得stream流
			InputStream stream = this.mContext.getResources().openRawResource(
					R.raw.school_out);
			try
			{
				// 将获取到的stream 流写入道data中
				FileOutputStream outputStream = new FileOutputStream(DB_FILE);
				byte[] buffer = new byte[BUFFER_SIZE];
				int count = 0;
				while ((count = stream.read(buffer)) > 0)
				{
					outputStream.write(buffer, 0, count);
				}
				outputStream.close();
				stream.close();
			}
			catch (FileNotFoundException e)
			{
				e.printStackTrace();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(DB_FILE,
				null);
		return database;
	}
	
	public SchoolBean getBean(String schoolName)
	{
		SchoolBean bean = null;
		Cursor cursor = this.database.rawQuery("SELECT * FROM school_out where name = '" + schoolName + "'", null);
		
		try
		{
			int index = cursor.getCount();
			System.out.println(index);
			if(index != 0){
				cursor.moveToFirst();
				bean = new SchoolBean();
				bean.setId(cursor.getString(cursor.getColumnIndex("sid")));
				bean.setSchoolName(cursor.getString(cursor.getColumnIndex("name")));
		    }
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}finally
		{
			cursor.close();
		}
		
		return bean;
	}

	/**
	 * 获取学校数据(拉取10 条)
	 * */
	public ArrayList<SchoolBean> getSchoolList(String where)
	{
		ArrayList<SchoolBean> nameList = new ArrayList<SchoolBean>();
		Cursor cursor = this.database.rawQuery(
				"SELECT * FROM school_out where name like '%" + where
						+ "%' limit 0, 20", null);
		try
		{
			for (int i = 0; i < cursor.getCount(); i++)
			{
				cursor.moveToPosition(i);
				SchoolBean bean = new SchoolBean();
				bean.setId(cursor.getString(cursor.getColumnIndex("sid")));
				bean.setSchoolName(cursor.getString(cursor.getColumnIndex("name")));
				nameList.add(bean);
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}finally{
			cursor.close();
		}
		return nameList;
	}
	
//	public SchoolBean[] getSchoolData(String where)
//	{
//		ArrayList<SchoolBean> lists = getSchoolList(where);
//		return (SchoolBean[]) lists.toArray();
//	}

	/**
	 * 
	 * <b>功能名:</b> 关闭数据库 <br/>
	 * <b>功能描述:</b> <br/>
	 * <b>创建时间:</b> 2013-8-6 <br/>
	 * <b>修改时间:</b> 2013-8-6 <br/>
	 */
	public void closeDatebase()
	{
		if (database != null && database.isOpen())
		{
			database.close();
		}
	}
}

 

分享到:
评论

相关推荐

    如何使用预先制作好的SQLite数据库

    `copyDatabase()`方法通常会打开`assets`目录的输入流,读取数据库文件,然后写入到目标路径。需要注意的是,如果数据库文件超过1MB,可能需要分块复制,因为Android的AssetManager不支持一次性读取大文件。这时可以...

    Android调用已有sqlite数据库登录帐号

    1. **复制数据库文件**:首先,你需要将预置的SQLite数据库文件放置到应用的资源目录,比如`assets`或`raw`目录。这使得应用在安装时可以访问到数据库文件。 2. **创建SQLiteOpenHelper子类**:尽管我们不打算使用`...

    android 文件读取(assets)

    在Android开发中,`assets`目录是一个特殊的地方,用于存储应用程序需要但不通过SQLite数据库或资源文件系统访问的非结构化数据。这个目录下的文件在编译时会被原封不动地复制到APK中,因此在运行时可以使用`...

    android实现raw文件夹导入数据库代码

    本篇将详细介绍如何将位于`res/raw`目录下的SQLite数据库文件(如`dictionary.db`)导入到应用程序的`database`目录下。 首先,`res/raw`目录是一个特殊的地方,它包含的应用程序资源不会被APK的压缩过程所压缩。...

    Android播放assets文件里视频文件相关问题分析

    - 基于Android中读取assets目录下a.txt文件并进行解析的深入分析 - Android操作存放在assets文件夹下SQLite数据库的方法 - Android编程读取Assets所有文件并存入sdcard的方法 - Android加载assets中的资源文件实例...

    安卓中把数据库读入内存中的判断方法

    如果不存在,则尝试从应用的`raw`资源中读取数据库文件,并将其复制到应用的数据目录下。这里需要注意的是,为了避免权限问题,可以考虑使用`Context.MODE_PRIVATE`而不是`Context.MODE_WORLD_READABLE`来打开文件...

    本示例实现一个英文词典

    在这个例子中,我们可能会使用FileInputStream来读取本地文件,或者使用AssetManager.open()方法来读取assets目录下的文件。文件内容可能是一个简单的文本文件,每行一个单词,或者是一个结构化的数据文件,需要解析...

    Android开发之读取Excel表格数据

    对于Excel文件,我们可以将其放在assets或raw目录下,这两个目录允许我们存放任意类型的文件,且在运行时可以通过AssetManager或Resources类进行访问。 1. **读取Excel文件** - **使用AssetManager**:当Excel文件...

    Android 数据库打包随APK发布的实例代码

    Android提供了两个位置可以存放不会被压缩的文件:`res/raw` 和 `assets` 目录。在这个例子中,我们将数据库文件 `test.db` 放入 `res/raw` 文件夹。这样做是因为这些文件在构建APK时保持原样,不会经过任何处理,...

    安装时加入外部数据库示例(android外部数据库)

    4. **创建数据库目录**:首先,需要确保数据库所在的目录存在。如果不存在,通过`mkdir()`方法创建目录。这里的`rootDirectory`是数据库路径的父目录。 5. **复制数据库文件**:如果目标路径下没有.db文件,代码会...

    Android 图书书架源码.zip

    此外,源码中可能还涉及到文件I/O操作,例如读取存储在assets或raw目录中的电子书内容。Android提供了FileInputStream和FileOutputStream类来处理文件的读写,同时也支持使用ParcelFileDescriptor进行大文件的流式...

    Android sd卡读取数据库实例代码

    如果不存在,我们从应用的资源(通常是assets或res/raw文件夹)中复制预置的数据库文件到SD卡。然后,使用`SQLiteOpenHelper`的`openOrCreateDatabase()`方法打开或创建数据库。 4. 使用数据库: 一旦数据库被成功...

    android黄历数据库

    在Android应用中直接使用这个黄历数据库,首先需要将.db文件添加到项目的assets或res/raw目录下。然后,通过SQLiteOpenHelper的子类来操作数据库,实现数据库的打开、读取、写入等操作。以下是一些关键步骤: 1. **...

    安卓Android源码——课程表.zip

    5. ** assets** 或 **raw** 目录:可能包含日历数据或其他静态文件。 6. **数据库文件**:如果应用使用SQLite,可能会有数据库相关的`.db`文件。 7. **测试代码**:可能包含单元测试或UI测试代码,以验证功能的正确...

    Android考试资料_文档

    2. **读取静态文件**:Android 应用可以访问`res/raw`和`assets`目录下的文件。对于`raw`文件,可以通过`getResources().openRawResource()`方法获取`InputStream`,然后利用`InputStreamReader`和`BufferedReader`...

    Android 医院介绍电子书籍源码.zip

    5. **数据存储**:电子书籍的内容可能存储在SQLite数据库中,或者以JSON格式加载于 assets 或 raw 目录下。源码会展示如何读取和显示这些数据。 6. **UI组件**:源码可能使用了TextView、ImageView、RecyclerView等...

    文件读写(SD卡文件,及资源文件)

    原始资源位于`res/raw`目录,而`assets`目录下的文件则需通过`AssetManager`实例来访问。 - **写入**:通常,我们不建议直接修改资源文件,因为它们在运行时是只读的。如果需要持久化存储,应考虑使用SQLite数据库...

    最全Android面试题

    1. SQLite:轻量级数据库,支持基本的 SQL 语法, Android 提供了 SQLiteDatabase 类封装了一些操作数据库的 API。 2. SharedPreference:一种常用的数据存储方式,实际是一个 xml 文件,常用于存储较简单的参数...

    citest_android:读

    10. **Asset文件读取**:应用的assets目录可存放非结构化的资源文件,如配置文件或数据库,通过`AssetManager`进行读取。 以上知识点涵盖了Android应用中读取数据的主要方式,但具体到"citest_android"项目,可能只...

    Android集成主流优秀第三方组件框架

    文件操作工具类(ToolFile.java),assets/raw/xml/shrePerface/等文件读写API 地图定位工具类(ToolLocation.java),读取GPS状态、请求定位、获取经纬度等方法 社会化分享工具类(ToolShareSDK.java),各大开发平台...

Global site tag (gtag.js) - Google Analytics