android 直接读取assets下数据库

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

import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

public class SQLdm {

	//数据库存储路径
	String filePath = "data/data/com.main.jh/xsqsq6.s3db";
	//数据库存放的文件夹 data/data/com.main.jh 下面
	String pathStr = "data/data/com.main.jh";
	
	SQLiteDatabase database; 

 	public  SQLiteDatabase openDatabase(Context context){
 		System.out.println("filePath:"+filePath);
 		File jhPath=new File(filePath);
 			//查看数据库文件是否存在
			if(jhPath.exists()){
				//存在则直接返回打开的数据库
				return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
			}else{
				//不存在先创建文件夹
				File path=new File(pathStr);
				if (path.mkdir()){
					System.out.println("创建成功");
				}else{
					System.out.println("创建失败");
				};
				try {
					//得到资源
					AssetManager am= context.getAssets();
					//得到数据库的输入流
					InputStream is=am.open("xsqsq6.s3db");
					//用输出流写到SDcard上面  
					FileOutputStream fos=new FileOutputStream(jhPath);
					//创建byte数组  用于1KB写一次
					byte[] buffer=new byte[1024];
					int count = 0;
					while((count = is.read(buffer))>0){
						fos.write(buffer,0,count);
					}
					//最后关闭就可以了
					fos.flush();
					fos.close();
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					return null;
				}
				//如果没有这个数据库  我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了
				return openDatabase(context);
			}
	}
	public Cursor selectSortId(String sortId,Context context){
		database=openDatabase(context);
		Cursor cursor=database.query("imageinfo", new String[]{"about","imageaddress","createdate","photographer"}, "sortid=?", new String[]{sortId}, null, null, null);
		return cursor;
	}
 

猜你喜欢

转载自zdpeng.iteye.com/blog/1630575
今日推荐