文章类型: ANDROID
关键词: android,studio,外部,sqlite3,数据库,导入,Android,项目
内容摘要: android studio将外部sqlite3数据库导入到Android项目中

android studio将外部sqlite3数据库导入到Android项目中

2019/4/18 9:28:30    来源:apple    阅读:

第一步:将数据库文件放入到assets目录中。注意Android studio需要将assets目录建在main项目下。即和Java,res等文件夹是同级的。

1.assets:不会在R.java文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,

2.res:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

res/raw和assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等

在res文件夹下还可以定义一下目录:

res/anim:这里存放的是动画资源。

res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件

res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是R.raw.XXX.

第二步:首次使用app,将assets目录下的数据库文件加载到android手机的sd下

/** 
 * 见assets目录下的文件拷贝到sd上 
 * @return 存储数据库的地址 
 */  
  
// 复制和加载区域数据库中的数据  
public static String  CopySqliteFileFromRawToDatabases(String SqliteFileName) throws IOException {  
  
    // 第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/<db_name>  
  
    File dir = new File("data/data/" + MyApplication.getContext().getPackageName() + "/databases");  
    LogUtil.i("!dir.exists()=" + !dir.exists());  
    LogUtil.i("!dir.isDirectory()=" + !dir.isDirectory());  
  
    if (!dir.exists() || !dir.isDirectory()) {  
        dir.mkdir();  
    }  
  
    File file= new File(dir, SqliteFileName);  
    InputStream inputStream = null;  
    OutputStream outputStream =null;  
  
    //通过IO流的方式,将assets目录下的数据库文件,写入到SD卡中。  
    if (!file.exists()) {  
        try {  
            file.createNewFile();  
  
            inputStream = MyApplication.getContext().getClass().getClassLoader().getResourceAsStream("assets/" + SqliteFileName);  
            outputStream = new FileOutputStream(file);  
  
            byte[] buffer = new byte[1024];  
            int len ;  
  
            while ((len = inputStream.read(buffer)) != -1) {  
                outputStream.write(buffer,0,len);  
            }  
  
  
        } catch (IOException e) {  
            e.printStackTrace();  
  
        }  
  
        finally {  
  
            if (outputStream != null) {  
  
                    outputStream.flush();  
                    outputStream.close();  
  
                }  
            if (inputStream != null) {  
                inputStream.close();  
            }  
  
            }  
  
        }  
  
    return file.getPath();  
  
}

第三:使用sd下的数据库文件。

/** 
 * 获取全国的省份 
 * 
 * @return 
 */  
  
public void getProvincesFromSQLite() {  
  
    SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openDatabase(sqliePath, null, SQLiteDatabase.OPEN_READONLY);  
  
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT * from T_Province", null);  
  
    provincesList.clear();  
    if (cursor.moveToFirst()) {  
  
        do {  
  
            String proSort = cursor.getString(cursor.getColumnIndex("ProSort"));  
            String proName = cursor.getString(cursor.getColumnIndex("ProName"));  
  
            provincesList.add(new Province(proSort,proName));  
  
        }while (cursor.moveToNext());  
  
  
        cursor.close();  
  
    }  
  
  
    provinceAdapter.notifyDataSetChanged();    
}


↑ 上一篇文章:android导入外部数据库到项目中的使用方法 关键词:android,导入,外部,数据库,项目,使用方法 发布日期:2019/4/18 9:10:30
↓ 下一篇文章:使用OPEN_READWRITE出现unknown error (code 14): Could not open database的解决方案 关键词:unknown,error,code,14,Could,.. 发布日期:2019/4/18 11:21:27
相关文章:
android导入外部数据库到项目中的使用方法 关键词:android,导入,外部,数据库,项目,使用方法 发布日期:2019-04-18 09:10
将Eclipse代码导入到AndroidStudio的两种方式 关键词:将Eclipse代码导入到AndroidStudio的两种方式 发布日期:2017-03-10 14:06
Android中SQLite数据库的数据类型 关键词:Android,SQLite,数据库,数据类型 发布日期:2019-04-19 15:15
相关目录:.NETANDROID
我要评论
正在加载评论信息......