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

目录
打赏
0
0
0
0
248
分享
相关文章
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
94 1
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
1085 0
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
211 8
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
810 1
成功解决7版本的数据库导入 8版本数据库脚本报错问题
您提供的链接是一篇关于如何解决在MySQL数据库中导入脚本时出现版本兼容性问题的博客文章。文章中提到,如果在MySQL 5.7之前的版本中使用utf8mb4_0900_ai_ci排序规则,会遇到"Unknown collation"错误。解决办法包括升级MySQL版本到8.0或更高,或者更改排序规则为utf8mb4_general_ci或utf8mb4_unicode_ci,并提供了修改SQL脚本的示例。 如果您需要更详细的信息或有其他问题,请告诉我。
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
207 1
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
472 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
319 0

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等