ITEEDU

将sqlite数据库打包进apk简单示例

数据库文件路径res/raw/wordroot.db数据库文件。没有raw文件夹的话可以自己创建,wordroot.db直接复制到文件夹下就可以了。

这个例子只是在一个activity中测试复制数据库是否成功。

package com.iteedu.www;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;

public class WordRootActivity extends Activity {
	/** Called when the activity is first created. */

	private static String DATABASE_PATH = 
	"/data/data/com.iteedu.www/databases/";
	private static String DATABASE_FILENAME = "wordroot.db";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//setContentView(R.layout.main);

		String databaseFilename = DATABASE_PATH + DATABASE_FILENAME;
		File dir = new File(DATABASE_PATH);
		
		if (!dir.exists())
			dir.mkdir();

		FileOutputStream os = null;
		try {

			os = new FileOutputStream(databaseFilename);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		InputStream is = 
	getResources().openRawResource(R.raw.wordroot);
		byte[] buffer = new byte[8192];
		int count = 0;
		// 开始复制db文件
		try {
			while ((count = is.read(buffer)) > 0) {
				os.write(buffer, 0, count);
				os.flush();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			is.close();
			os.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		SQLiteDatabase db = 
	SQLiteDatabase.openDatabase(databaseFilename, null,
				SQLiteDatabase.OPEN_READONLY);

		Cursor cur = db.rawQuery(
	"select * from wordroot", new String[] {});
		int columnNumber = cur.getColumnCount();
		String cn = "";
		for (int i = 0; i < columnNumber; i++)

		{

			String temp = cur.getColumnName(i);
			cn = cn + "\nlistColumnNames" + i + "\t" + temp;

		}

		cur.close();

		TextView tv = new TextView(this);
		tv.setText(cn);
		setContentView(tv);

	}
}