淺析Android手機(jī)衛(wèi)士之號(hào)碼歸屬地查詢
使用小米號(hào)碼歸屬地?cái)?shù)據(jù)庫,有兩張表data1和data2
先查詢data1表,把手機(jī)號(hào)碼截取前7位
select outkey from data1 where id=”前七位手機(jī)號(hào)”
再查詢data2表,
select location from data2 where id=”上面查出的outkey”
可以使用子查詢
select location from data2 where id=(select outkey from data1 where id=”前7位手機(jī)號(hào)”)
創(chuàng)建數(shù)據(jù)庫工具類
新建一個(gè)包xxx.db.dao
新建一個(gè)類NumberAddressUtils,新建一個(gè)靜態(tài)方法queryNumber
調(diào)用SQLiteDatabase.openDatabase()方法,獲取到SQLiteDatabase對(duì)象,參數(shù):數(shù)據(jù)庫路徑(/data/data/包名/files/xxx.db),游標(biāo)工廠(null),打開方式(SQLiteDatabse.OPEN_READONLY)
把數(shù)據(jù)庫address.db拷貝到 /data/data/包名/files/目錄里面
調(diào)用SQLiteDatabase對(duì)象的rawQuery()方法,獲取到Cursor對(duì)象,查詢數(shù)據(jù),參數(shù):sql語句,string[]條件數(shù)組
例如:select location from data2 where id=(select outkey from data1 where id=?) ,new String[]{phone.subString(0,7)}
while循環(huán)Cursor對(duì)象,條件調(diào)用Cursor對(duì)象的moveToNext()方法
循環(huán)中調(diào)用Cursor對(duì)象的getString()方法,傳入字段索引
關(guān)閉游標(biāo)Cursor對(duì)象的close()方法
把得到的地址返回出去
拷貝數(shù)據(jù)庫從assets目錄到data目錄
在歡迎頁面,進(jìn)行拷貝
調(diào)用getAssets().open()方法,得到InputStream對(duì)象,參數(shù):xxx.db文件名
獲取File對(duì)象,new出來,參數(shù):getFilesDir()獲取到/data/data/包/files/目錄,xxx.db
獲取FileOutputStream對(duì)象,new出來,參數(shù):File對(duì)象
定義緩沖區(qū)byte[] buffer,一般1024
定義長度len
while循環(huán)讀取,條件:讀入的長度不為-1
循環(huán)中調(diào)用FileOutputStream對(duì)象的write()方法,參數(shù):緩沖區(qū),從0開始,len長度
調(diào)用InputStream對(duì)象的close()方法
判斷只要存在和長度大于0就不再拷貝了,調(diào)用File對(duì)象的exist()方法和length()方法大于0
NumberQueryAddressUtil.java
package com.qingguow.mobilesafe.utils;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class NumberQueryAddressUtil {
private static final String path = "/data/data/com.qingguow.mobilesafe/files/address.db";
/**
* 查詢號(hào)碼歸屬地
* @param phone
* @return
*/
public static String queryAddress(String phone){
SQLiteDatabase db=SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);
Cursor cursor=db.rawQuery("select location from data2 where id=(select outkey from data1 where id=?)", new String[]{phone.substring(0,7)});
while(cursor.moveToNext()){
String address=cursor.getString(0);
return address;
}
cursor.close();
return "";
}
}
拷貝數(shù)據(jù)庫
private void copyAddressDatabase() {
try {
//判斷是否存在
File file = new File(getFilesDir(), "address.db");
if (file.exists() && file.length() > 0) {
return;
}
InputStream is = getAssets().open("address.db");
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
is.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
推薦閱讀:
深入淺析Android手機(jī)衛(wèi)士保存密碼時(shí)進(jìn)行md5加密
詳解Android 手機(jī)衛(wèi)士設(shè)置向?qū)ы撁?/a>
淺析Android手機(jī)衛(wèi)士關(guān)閉自動(dòng)更新
淺析Android手機(jī)衛(wèi)士自定義控件的屬性
淺析Android手機(jī)衛(wèi)士讀取聯(lián)系人
淺析Android手機(jī)衛(wèi)士接收短信指令執(zhí)行相應(yīng)操作
淺析Android手機(jī)衛(wèi)士手機(jī)定位的原理
淺析Android手機(jī)衛(wèi)士之手機(jī)實(shí)現(xiàn)短信指令獲取位置
以上內(nèi)容是小編給大家介紹的Android手機(jī)衛(wèi)士之號(hào)碼歸屬地查詢的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!
- Android組件WebView編寫有道詞典小案例分享
- Android 有道詞典的簡單實(shí)現(xiàn)方法介紹
- Android優(yōu)化查詢加載大數(shù)量的本地相冊(cè)圖片
- Android手機(jī)號(hào)碼歸屬地的查詢
- Android編程實(shí)現(xiàn)號(hào)碼歸屬地查詢的方法
- Android編程操作聯(lián)系人的方法(查詢,獲取,添加等)
- Android中的SQL查詢語句LIKE綁定參數(shù)問題解決辦法(sqlite數(shù)據(jù)庫)
- Android 軟件自動(dòng)更新功能實(shí)現(xiàn)的方法
- android實(shí)現(xiàn)倒計(jì)時(shí)功能代碼
- Android實(shí)現(xiàn)上傳文件功能的方法
- Android實(shí)現(xiàn)有道辭典查詢功能實(shí)例詳解
相關(guān)文章
Android studio 使用Debugger問題(代碼中含有ndk)
這篇文章主要介紹了Android studio 使用Debugger問題(代碼中含有ndk),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
21天學(xué)習(xí)android開發(fā)教程之SurfaceView與多線程的混搭
21天學(xué)習(xí)android開發(fā)教程之SurfaceView與多線程的混搭,感興趣的小伙伴們可以參考一下2016-02-02
Android編程實(shí)現(xiàn)的身份證、車牌號(hào)正則驗(yàn)證工具類實(shí)例
這篇文章主要介紹了Android編程實(shí)現(xiàn)的身份證、車牌號(hào)正則驗(yàn)證工具類,結(jié)合實(shí)例形式分析了java針對(duì)身份證、車牌號(hào)數(shù)字字符串正則驗(yàn)證操作技巧,需要的朋友可以參考下2017-12-12
Android 為ListView添加分段標(biāo)頭的方法
下面小編就為大家?guī)硪黄狝ndroid 為ListView添加分段標(biāo)頭的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Android 使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼
很多app中在第一次安裝登陸時(shí)會(huì)有引導(dǎo)歡迎界面,第二次打開時(shí)就不再顯示引導(dǎo)頁面。這個(gè)怎么實(shí)現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼,需要的的朋友參考下吧2017-03-03
Android提高之多級(jí)樹形菜單的實(shí)現(xiàn)方法
這篇文章主要介紹了Android多級(jí)樹形菜單的實(shí)現(xiàn)方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
android仿微信表情雨下落效果的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于android仿微信表情雨下落效果的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Kotlin協(xié)程flowOn與線程切換超詳細(xì)示例介紹
這篇文章主要介紹了Kotlin協(xié)程flowOn與線程切換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
Android EditText實(shí)現(xiàn)扁平化的登錄界面
這篇文章主要為大家詳細(xì)介紹了Android EditText實(shí)現(xiàn)扁平化的登錄界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

