Android导入外部数据库

当我们软件中要使用大量数据,我们会选择将这些数据存储到一个数据库中,然后通过数据库的查询修改操作来管理这些数据。大多数情况下我们都只在程序中建立使用数据库,但也有我们在程序中只是使用的数据库,并不在程序中建立它们,因为这种数据库往往数据量比较大,我们在建立时如果不采用多线程和后台服务的话,很容易导致前台界面的阻塞停滞,这样往往会影响用户体验,造成不好的使用效果。这时我们可不可以直接建好数据库并录入数据,然后通过程序将数据库正确导入进我们的软件文件夹里面。这样减少了读取数据和建立数据库的时间,可以在很大程度上提高软件响应的速度。

还是结合之前做的一个软件的天气预报功能开发的实例来讲解如何导入外部数据库。首先我们通过DDMS看一下数据库的存放路径,一般情况下数据库的存放路径为:/data/packagname/databases/( packagname指的是我们所建立的工程的包名,例如这里我的包名就是com.liuproject.reminder。有的数据库就直接在packagname下面,有的则是在databases目录下,大家可以打开DDMS看一下。)如图databases文件夹下面有两个数据库:

其中City(上图为导入成功后的截图)就是我们即将要从外部导入的数据库。我们将建好的City数据库文件拷贝到我们所建工程的assets文件夹中,如下图所示:

要注意我们所提供的外部数据要和我们设计的将在软件中使用的数据库保持一致,及时每一条记录的属性值名称和数据类型一致。数据准备完成后我们就可以开始导入外部数据库了。具体实现源码如下:

[java] view plain copy

 print?

  1. import java.io.FileNotFoundException;  
  2. import java.io.FileOutputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import android.content.Context;  
  6. import android.database.Cursor;  
  7. import android.database.sqlite.SQLiteDatabase;  
  8. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  9. import android.database.sqlite.SQLiteOpenHelper;  
  10. import android.os.Environment;  
  11.    
  12. public class ImportDB{  
  13.     private final int BUFFER_SIZE = 10000;  
  14.     public static final String DB_NAME = "City"; //保存的数据库文件名  
  15.     public static final String PACKAGE_NAME = "com.liuproject.reminder";//工程包名  
  16.     public static final String DB_PATH = "/data"  
  17.             + Environment.getDataDirectory().getAbsolutePath() + "/"  
  18.             + PACKAGE_NAME+"/databases";  //在手机里存放数据库的位置  
  19. private Context context;  
  20.    
  21.    ImportDB(Context context) {  
  22.         this.context = context;  
  23.     }  
  24.      
  25.     public void copyDatabase() {  
  26.              String dbfile=DB_PATH + "/" + DB_NAME ;  
  27.         try {  
  28.            //执行数据库导入  
  29.                 InputStream is = this.context.getResources().getAssets().open("City"); //欲导入的数据库  
  30.                 FileOutputStream fos = new FileOutputStream(dbfile);  
  31.                 byte[] buffer = new byte[BUFFER_SIZE];  
  32.                 int count = 0;  
  33.                 while ((count = is.read(buffer)) > 0) {  
  34.                     fos.write(buffer, 0, count);  
  35.                 }                
  36.                 fos.close();//关闭输出流  
  37.                 is.close();//关闭输入流  
  38.         } catch (FileNotFoundException e) {  
  39.             e.printStackTrace();  
  40.         } catch (IOException e) {  
  41.             e.printStackTrace();  
  42.         }   
  43.     }  
  44. }  
  45. 通过上面的这个class我们就可以将存放在assets文件夹中的外部数据库导入到我们所需要的文件目录下。接着开始建立我们在程序中所要使用的数据库类,如下代码:  
  46. class CityDB extends SQLiteOpenHelper{//城市Id数据库操作  
  47.          private final String DB_NAME="CityID";//数据库名称  
  48.           public CityDB(Context context,String name,CursorFactory factory,int version) {  
  49.                    super(context, name,factory, version);  
  50.           }  
  51.    
  52.          @Override  
  53.          public void onCreate(SQLiteDatabase db) {               
  54.                     String createDB= "create table "+DB_NAME+"(cityid varchar(14) primary key , cityname varchar(20),type int)";//数据库中记录的属性名称及属性值类型  
  55.                     db.execSQL(createDB);//创建数据库  
  56.          }  
  57.    
  58.          @Override  
  59.          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  60.                      String dropTableSQL = "DROP TABLE IF EXISTS "  + DB_NAME + " ";  
  61.                      db.execSQL(dropTableSQL);  
  62.                      dropTableSQL = "DROP TABLE IF EXISTS " + DB_NAME   + " ";  
  63.                      db.execSQL(dropTableSQL);  
  64.                      onCreate(db);       
  65.          }  
  66.             
  67.          public void execSQL(String sql, Object[] args) {//执行操作  
  68.                    SQLiteDatabase db = this.getWritableDatabase();  
  69.                    db.execSQL(sql, args);  
  70.          }  
  71.    
  72.          public Cursor query(String sql, String[] args) {//返回操作结果指针  
  73.                    SQLiteDatabase db = this.getWritableDatabase();  
  74.                    Cursor cursor = db.rawQuery(sql, args);  
  75.                    return cursor;  
  76.          }  
  77. }  

    在之后的程序中我们就可以通过new CityDB(this, NAME, null,  VERSION);来创建一个数据库操作辅助对象,其中的NAME要与我们之间导入的外部数据库名称一致,在我的例子里面NAME=“City”,VERSION为数据库的版本号,尽量保持与前面建立时的一致性。在程序合适的位置使用ImportDB类的copyDatabase()方法将数据库导入。如果数据库比较大可以在后台开线程进行操作。

转载:http://blog.csdn.net/chaoyu168/article/details/50467913

时间: 2024-09-21 13:11:24

Android导入外部数据库的相关文章

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

android打包安装时加入外部数据库,我有这个需求所以就写了下面的代码,现在分享给大家 复制代码 代码如下: public void createDatabase() {  try    {      // 获得.db文件的绝对路径      String databaseFilename = DATABASE_PATH + DATABASE_FILENAME;      File dir = new File(rootDirectory);      // 如果目录不存在,创建这个目录  

Android应用导入静态数据库加速启动

一个Android除了要有好的创意和美观的界面,性能也是很关键的部分,本文讨论的就是第一次启动的速度问题. Android应用的启动过程不能让用户等待太长时间,个人觉得最好控制在3秒之内.一般来说,内容的初始化是影响Android应用第一次启动速度的主要因素之一,尤其是创建数据库并插入一定数量的初始记录,对于这种问题,最好的办法莫过于在首次初始化时导入静态数据库.  在Android中导入静态数据库很简单,首先将准备好的静态数据库文件放到Android工程的res目录中的raw子目录下面,如果没

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

android打包安装时加入外部数据库,我有这个需求所以就写了下面的代码,现在分享给大家 复制代码 代码如下:public void createDatabase() {  try    {      // 获得.db文件的绝对路径      String databaseFilename = DATABASE_PATH + DATABASE_FILENAME;      File dir = new File(rootDirectory);      // 如果目录不存在,创建这个目录    

Android导入现有的数据库方法示例

前言 大家在平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,我们然后在进行相关操作.这个我们就比较好做了,因为这个数据库是我们一开始就跟着这个应用走的,那么我们有的时候不可能什么都是自己去做的.我们要是需要使用一个已有数据的数据库怎么办呢?大家想一想在android系统下数据库应该存放在什么地方呐,我们要是知道数据库存放在什么地方就好办了,现在大家有没有思路了.没有的话,下面来看看详细的介绍吧. 方法如下 我们都知道 Android的 数据库默认是放在data\data

android导入消息到数据库问题

问题描述 使用方法importMessage(EMMessage, ture);本次登录可以在conversation中获取到,但是下一次登录时,在conversation中无法获取到前一次导入的消息.请问这是没有真实的存储到数据库以致于下一次查询不到吗?本次登录是可以获取到插入的消息 解决方案 你这个导入后 是否后边有发送了新的消息,就是聊天了呢?解决方案二:有没有发送过其他新的消息都是一样的,下一次登录的时候手动导入到数据库的消息就不见了解决方案三:想请问下,手动导入到数据库的数据,有没有真

将Excel数据导入Access数据库

access|excel|数据|数据库 将Excel数据导入Access数据库   最近,有一些网友常常问到关于Execl数据库操作的问题,其中不少是关于"Excel数据导入Access "的问题.至于将Execl数据导入Access的方法有两种:一种是直接导入法:另一种是建立连接法.而我们在日常工作中用的最多的是直接导入法,限于篇幅,我这里就只讲直接导入法,希望能给大家带来参考. 具体操作可以按以下步骤进行: 1. 启动Microsoft Access2000: 2.  建立一个空数

Excel2013中工作表怎么导入Access数据库数据

  Excel2013中工作表怎么导入Access数据库数据 1.启动Excel 2013,打开需要导入Access数据库数据的工作表,在"数据"选项卡的"获取外部数据"组中单击"自Access"按钮,如图1所示.打开"选取数据源"对话框,选取作为数据源的数据库文件,然后单击"打开"按钮,如图2所示. 图1 单击"自Access"按钮. 图2 "选择数据源"对话框.

Excel工作表怎么导入Access数据库数据

  Excel工作表怎么导入Access数据库数据            1.启动Excel 2013,打开需要导入Access数据库数据的工作表,在"数据"选项卡的"获取外部数据"组中单击"自Access"按钮,如图1所示.打开"选取数据源"对话框,选取作为数据源的数据库文件,然后单击"打开"按钮,如图2所示. 图1 单击"自Access"按钮 图2 "选择数据源"

掌握要领 实现Excel动态链接外部数据库

我们有时需要在Excel中调取其他数据库的数据,并且希望其他数据库数据改变时,Excel中调取的数据也随之动态改变.下面介绍在Excel中通过"新建数据库查询"(Microsoft Query)的方法来实现动态链接数据库. 您在Excel中第一次使用"新建数据库查询"查询数据时,如果系统未安装Microsoft Query,系统会提示您安装. 一.Excel链接vfp数据库 vfp是常用的数据库,先以此来介绍.假设从px.dbf表中取出相应学校的数据,已知学校的后5