练手小项目(2)-生活小助手之归属地查询

 归属地查询有几种可以查询到,

第一种:联网查询;

第二种:把数据库 放在本地;

我主要用这一片文章对数据库的练习下,真心觉得数据库这方面比较弱........................


首先呢,我们把从网上找到的数据库存在 assets目录下,这个文件主要放一些MP3啥的东西,

第一步,因为放在assets目中 我们是无法访问到的,所以我们要先把数据库文件copy到app自身默认的文件中

	/**
	 * 拷贝数据库
	 */
	private void CopyDb() {

		try {
			//先判断下默认路径下,是否存在
			File file = new File(getFilesDir(), "address.db");
			if (file.exists()&& file.length() > 0) {
				//正常不需要拷贝
			}else{//利用io流转到默认路径
				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 (IOException e) {
			e.printStackTrace();
		}
	}
然后我们看下布局 ,也很简单就是一个Edittext输入你要查询的号码,然后button点击 去查询,最后显示在textview

在button的点击事件中 利用sql语句去查询结果,

String phone = editText.getText().toString().trim();
String number = NumberAddressQuryUtils.queryNumber(phone);

这里我们要专门建立一个数据库类去查询。


package com.example.Darkbutton;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class NumberAddressQuryUtils {
	//数据库默认路径
	private static String path = "data/data/com.example.Darkbutton/files/address.db";

	/**
	 * 传一个号码进来,返回一个归属地回去
	 * 
	 * @param number
	 * @return
	 */
	public static String queryNumber(String number) {
		String address=number;
		SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
				SQLiteDatabase.OPEN_READONLY);
		//手机号码的正则表达式
		if (number.matches("^1[34568]\\d{9}$")) {
			//手机号码
			Cursor cursor = database.rawQuery(
					"select location from data2 where id = (select outkey from data1 where id = ?)",
					new String[] { number.substring(0, 7) });
			while (cursor.moveToNext()) {
				String location = cursor.getString(0);
				address=location;
			}
			cursor.close();
		}else{
			//其他号码
			switch (number.length()) {
			case 3:
				//110
				address="匪警号码";
				break;
			case 4:
				//554
				address="模拟器";
				break;
			case 5:
				//10086
				address="客服电话";
				break;
			case 7:
				//100x
				address="本地号码";
				break;
			case 8:
				//10086
				address="本地号码";
				break;

			default:
				//处理长度电话10
				if (number.length()>10&&number.startsWith("0")) {
					Cursor cursor = database.rawQuery(
							"select location from data2 where area = ?",
							new String[] { number.substring(1, 3) });

					while (cursor.moveToNext()) {
						String location = cursor.getString(0);
						address = location.substring(0, location.length() - 2);
					}
					cursor.close();

					// 0855-59790386
					cursor = database.rawQuery(
							"select location from data2 where area = ?",
							new String[] { number.substring(1, 4) });
					while (cursor.moveToNext()) {
						String location = cursor.getString(0);
						address = location.substring(0, location.length() - 2);

					}
				}
				break;
			}
		}
		
		return address;
	}
}

End



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值