Android导入外部数据库

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

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

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

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

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;

public class ImportDB{
    private final int BUFFER_SIZE = 10000;
    public static final String DB_NAME = "City"; //保存的数据库文件名
    public static final String PACKAGE_NAME = "com.liuproject.reminder";//工程包名
    public static final String DB_PATH = "/data"
            + Environment.getDataDirectory().getAbsolutePath() + "/"
            + PACKAGE_NAME+"/databases";  //在手机里存放数据库的位置
private Context context;

   ImportDB(Context context) {
        this.context = context;
    }

    public void copyDatabase() {
             String dbfile=DB_PATH + "/" + DB_NAME ;
        try {
           //执行数据库导入
                InputStream is = this.context.getResources().getAssets().open("City"); //欲导入的数据库
                FileOutputStream fos = new FileOutputStream(dbfile);
                byte[] buffer = new byte[BUFFER_SIZE];
                int count = 0;
                while ((count = is.read(buffer)) > 0) {
                    fos.write(buffer, 0, count);
                }
                fos.close();//关闭输出流
                is.close();//关闭输入流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
通过上面的这个class我们就可以将存放在assets文件夹中的外部数据库导入到我们所需要的文件目录下。接着开始建立我们在程序中所要使用的数据库类,如下代码:
class CityDB extends SQLiteOpenHelper{//城市Id数据库操作
         private final String DB_NAME="CityID";//数据库名称
          public CityDB(Context context,String name,CursorFactory factory,int version) {
                   super(context, name,factory, version);
          }

         @Override
         public void onCreate(SQLiteDatabase db) {
                    String createDB= "create table "+DB_NAME+"(cityid varchar(14) primary key , cityname varchar(20),type int)";//数据库中记录的属性名称及属性值类型
                    db.execSQL(createDB);//创建数据库
         }

         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                     String dropTableSQL = "DROP TABLE IF EXISTS "  + DB_NAME + " ";
                     db.execSQL(dropTableSQL);
                     dropTableSQL = "DROP TABLE IF EXISTS " + DB_NAME   + " ";
                     db.execSQL(dropTableSQL);
                     onCreate(db);
         }

         public void execSQL(String sql, Object[] args) {//执行操作
                   SQLiteDatabase db = this.getWritableDatabase();
                   db.execSQL(sql, args);
         }

         public Cursor query(String sql, String[] args) {//返回操作结果指针
                   SQLiteDatabase db = this.getWritableDatabase();
                   Cursor cursor = db.rawQuery(sql, args);
                   return cursor;
         }
}

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

时间: 2024-09-29 16:35:45

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

使用SQLyog将Excel数据导入Mysql数据库

1:建数据库 2:右键数据库→导入→导入外部数据库 3:直接下一步 4:选择数据源类型为EXCEL,选择文件路径,下一步 5:设置数据库信息,下一步 6:选择数据表,Destination中设置数据表名称,Map中设置Excel表列数据的数据表字段名,指定数据类型和长度 7:Advanced中设置表的创建方式 8:下一步直到结束 9:结果 备注:初次导入Excel表需要安装一个小工具,在导入的过程中按提示下载安装即可

Android 如何导入已有的外部数据库

转载自:http://www.cnblogs.com/xiaowenji/archive/2011/01/03/1925014.html 我们平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,然后再进行相关操作.如果我们需要使用一个已有数据的数据库怎么办呢?我们都知道android系统下数据库应该存放在 /data/data/com.*.*(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下.操作方法是用FileInputStream读取

Android中通过导入静态数据库来提高应用第一次的启动速度

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

Android Studio 导入外部lib文件

Android Studio 导入外部lib文件 1.将jar包放入Module里的lib文件夹中.(自己创建lib文件夹) 2.在project选中jar包点击右键"Add as library". 3.此时项目仍然是无法正常编译的,这时需要在项目里的module的build.gradle文件里的dependencies节加入以下内容 compile files('lib/xxxx.jar') 这里files括号里面的地址是相对于build.gradle文件的相对路径 4.此时项目正

android中activity可以响应外部的action的例子(可以用这个来导入外部文件)

如果我们在文件浏览器中点击一个文件,然后点击它,会弹出一个列表给你选择 如果使自己的应用也出现在这个列表上,必须在menifest的这个activity下加入: <activity android:name="com.example.clickabletextview.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name

在Android中通过导入静态数据库来提高应用第一次的启动速度

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

Android Studio三种方式导入外部资源 以及 报错处理

android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加.需联网下载 2. File dependency – 从本地添加一些jar包(要先将jar包拷贝到项目的libs文件夹下) 3. Module dependency – 从本地添加带有源码的库工程(要先 import Moudle 将库工程导入项目中) 其中第三种方式导入会报一些错误,这里以github上的开源框架android-async-http 为例,给出一种导入的步骤并尝试

批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案

在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一下,导出的Excel是标准文件不是html,没错,Excel文件正常. 调试代码,创建连接对象oleDbConnection也正常,但在conn.Open()打开链接时出错. 仔细看了下链接字符串,检查出了错误,Excel版本问题,Exce连接字符串版本是office2003的 ,更改为Excel2007版本则正常导入. 总结规则如下: usin

MySQL 之 导入外部SQL Server数据

在上一篇博客<MySQL 之 5.6.22安装教程>中,我们介绍了MySQL的安装.今天我们主要讲解一下怎么在MySQL中导入外部SQL Server数据,简而言之就是我们怎么将SQL Server数据库中的数据迁移到MySQL数据库中. 为了实现我们想要的数据迁移,我们首先需要下载一个小工具SQLyog,然后安装到我们的电脑上,接下来我们就一步一步用这个小工具开始我们的数据迁移: 首先看看我们SQL Server数据库中的表结构和表中的数据 打开SQLyog,设置数据连接: 创建跟SQL S