Android软件开发之制作第三方数据库与读取文件中数据库详解
雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/199
好久都没有更新Android开发系列博文了,不知道大伙还能都记得我这个老朋友,嘿嘿。其实这段时间Android的开发我也一直都没有闲着,Android + IOS + Unity 的游戏与软件开发MOMO都在同时进行,给力的生活还是继续这儿。希望过段时间有机会可以尝试制作一些WP7下的游戏或软件的开发。
Android软件开发中为什么要制作第三方数据库?在程序中获取数据的方式无非就是两种:本地获取,服务器获取。如果项目中的数据非常庞大,并且又不能使用联网获取数据的方式,那么就需要采取制作第三方数据库的方式。我用一个比较实际的例子向大家说明这一点,最近我制作了一个来电归属地查询的小DEMO,产品的需求是对方打过来电话后能再屏幕中现实对方手机号码的归属地。Android提供了联网获取归属地的方式,但是我没有采取这样的方式获取号码归属地。因为联网获取号码归属地时间实在无法控制,有可能用户已经接通电话数据才获取到,那么来电归属地的意义就不存在了。并且联网获取数据还必需是在有网络的情况下,所以限制太多了,所以我放弃的联网获取手机号码归属地的方法。
接着我在网络中找了一份07年手机号码归属地的数据库原始资源。它是以TXT形式包含中国所有省份与城市的号码归属地规则,如下图所示,打开上海所在的归属地文件后。发现归属的规则是截取手机号码前6位判断手机号码所在的归属地。归属地数据库的原始资源包括移动号码与联通号码,加起来一共有61个文本文件。我们需要编写程序这些数据需要全部写入数据库中,然后将生成的数据库文件放入需要查询的新工程中。这么做的原因是归属地数据库的数据量比较大,如果在查询的工程中写入数据库的话至少也要20分钟。这样会造成用户安装完软件后,第一个电话打进来时有可能你的数据库还没写完,用户体验大打折扣。所以我们需要在第三方程序中将这个庞大的数据库先制作出来,然后在放入软件中,最后直接操作这个数据库即可。
07年的数据确实有点老,但是本篇博文的重点不是探讨手机号码归属地。我最终的涉及思路是将.db文件放置在服务器中,服务器端来维护这个db文件,用户首次安装时从服务器下载这个数据库文件,说的有点远了 呵呵。下面学习如何将归属地数据库中庞大的原始数据写入数据库当中,首先需要制作生成数据库的程序。如下图所示,本程序的是方法为点击“开始读取资源写入数据库”按钮后,程序将循环开始在本地读取所有原始资源,截取出需要的数值后在写入归属地数据库当中。
上图对应的Activity是GenerateDBActivity,代码如下所示:
注解1:在窗口中用户点击“读取写入数据库”按钮后,程序将开启一个线程来读取资源,而且代码必需写在线程中读取,因为数据量比较大,主线程中读取会出现ANR的情况。DBHelper.LOCATIONS.Length表示原始数据资源文件的数量,这里使用循环将读取所有原始资源文件。
注解2:loadLocationFile()方法开始读取本地原始资源,原始资源全部放置在res/raw下,使用openRawResource()方法取得每一个原始文件的流对象。然后在while循环中调用br.readLine()方法逐行读取文本对象中的数据,数据读取完毕后将它们写入数据库当中。因为这里是线程,所以需要刷新UI时就得使用Handler了。
注解3:数据库中每插入一条数据库使用handler发来一条消息,在这里获取该消息附带的参数,然后刷新UI将数据现实在屏幕中。
数据库的创建与插入数据的方法写在 DBHelper类当中,代码如下所示:
数据库写入完毕后,然后将生成的数据库从程序中拷贝至本地。如下图所示,将本例程序的location.db文件拷贝至电脑中。
然后使用数据库查看软件,来看一看我们生成的数据库。因为我这里使用的是mac在做开发,所以和以前写用的数据库查看软件有点不一样。如下图所示,本地数据已经写入到数据库当中 , 下面说一下字段的含义:_id为升序具有唯一性 , number 表示号码的前6位字段,city表示号码归属地的城市,location:表示省级的运营商归属地。那么到这一步我们的第三方数据库文件就已经制作完毕。如果有朋友问能不能使用非Android程序生成的数据库,那么我建议最好不要用。或者你将系统生成的表android_metadata与sqlite_sequence表添加进你的数据库试一试,因为这个数据库一定要与Android生成出来的数据库结构一样。否则在部分Android手机上无法打开它db文件的对象。
接着创建一个新android工程,用于我们查询数据库。首先将上面工程中生成的归属地数据库文件location.db拷贝至新工程的raw文件夹中。在如下代码中开始载入数据库中的内容。
注解1:首先将raw文件夹中的数据库文件拷贝至程序内存当中,接着通过拷贝后的路径获取数据库文件的对象。有了数据库对象那么增、删、改、查的操作都可以执行啦。最后的效果图如下所示,输入手机号码后点击查询,下方将现实手机号码的归属地信息。
最后还是老规矩每篇文章都会附带源代码,最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习雨松MOMO希望可以和大家一起进步。
下载地址:http://download.csdn.net/detail/xys289187120/4175304(内容包括数据库生成程序与数据库查询程序)
分享到:
相关推荐
雨松MOMO软件开发系列博文Android软件开发之制作第三方数据库与读取文件中数据库详解(三十四) 欢迎大家下载阅读,哇咔咔。
Android读取Assert资源目录下数据库,数据库操作; Android读取Assert资源目录下数据库,数据库操作 Android读取Assert资源目录下数据库,数据库操作
C# 文件保存到数据库中或者从数据库中读取文件
C#基础操作之读取文件到数据库,值得下载和练习
从数据库读取图片文件
c#从数据库中读取文件并打包成xml,代码,简单易懂
数据库通用读取软件ACC,MSSQL.MYSQL
一个Android读取数据库信息的例子供大家参考学习。
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库
一个关于android数据使用的小项目,本来我是用IO流的,但是android2.3很多函数对空格有编译,io流并不是varchar那样的(也可能是我不会),所以很多IO出来的字符串用到函数里都会出现差异。 被逼无奈啊。。 才用了...
C#读取XML文件并写入数据库的三种方法,直接写入和先读取到内存再写入数据库
Android开发,使用到了本地数据库操作,文件存储及读取,相机调用,相册调用 最低构建版本:Android 7.0
图片存入数据库从数据库中读取图片.txt
android 读取本地中国城市数据库 包括本地数据库 参见:http://blog.csdn.net/ttdevs/article/details/11989123
从数据库中读取数据并显示在RichTextBox从数据库中读取数据并显示在RichTextBox从数据库中读取数据并显示在RichTextBox
读取数据库备份文件,支持单个文件,文件夹,小工具程序
在测试的时候,需要造模拟数据,或者是将生产环境的数据导出到测试环境中去,本文记录通过python读取txt文件,并将数据导入mysql数据库 1、示例代码: import pymysql # 打开数据库连接 conn = pymysql.connect(host...
把word文件转为二进制文件流存入数据库,并且实现读取的小案例
VS2019平台 利用VB.net 编写的FUNCTION 函数 对SQL2014数据库进行读取和写入的例程源码。运行直接查询数据库并显示。编辑好对应文本内容后点击保存,直接保存到SQL数据库中。适合工程直接引用以及项目二次开发。