android实现省市查询

1.在安卓项目中res文件夹创建raw文件夹

将city.db添加到raw文件夹下

city.db下载地址



2.用文件流将raw下的数据库导入到data/data下就可以随心所欲的操作了

package com.pw.weather.db;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import com.pw.weather.R;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * FileName:weather
 * Description:
 * Created by:pengwei
 * date:2014/9/7 15:55
 */
public class CityDB {

    private static CityDB instance;
    private SQLiteDatabase db;
    private Context context;


    private final static String TABLE_PROVINCE = "PROVINCE";
    private final static String TABLE_CITY = "CITY";

    private final static String DB_NAME = "city.db";
    public static String DB_PATH;

    private CityDB(Context context) {
        this.context = context;
        DB_PATH = "/data"
                + Environment.getDataDirectory().getAbsolutePath() + "/"
                + context.getPackageName();
        this.importDB();
    }

    /**
     * 模糊查询城市名
     * 分别根据城市名,城市名拼音,城市名拼音简写模糊查询
     * @param key
     * @return
     */
    public List<String> searchCity(String key) {
        List<String> list = new ArrayList<String>();
        String likeKey = "%" + key + "%";
        Cursor cursor = db.query(TABLE_CITY, null, "cityname like ? or pycityname like ? or pyshort=? ",
                new String[]{likeKey, likeKey, key}, null, null, null, null);
        while (cursor.moveToNext()) {
            list.add(cursor.getString(cursor.getColumnIndex("cityname")));
        }
        return list;
    }

    //单例模式
    public static CityDB getInstance(Context context) {
        if (null == instance) {
            instance = new CityDB(context);
        }
        return instance;
    }

    //从raw下导入数据库文件到/data/date/包名/databases下
    private void importDB() {
        String dbFile = DB_PATH + "/" + DB_NAME;
        if (!new File(dbFile).exists()) {
            InputStream is = context.getResources().openRawResource(R.raw.city);
            try {
                FileOutputStream fos = new FileOutputStream(dbFile);
                byte[] buffer = new byte[2048];
                int count = 0;
                while ((count = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, count);
                }
                fos.close();
                is.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        db = context.openOrCreateDatabase(dbFile, Context.MODE_PRIVATE, null);
    }

}

3.上面我就写了一个模糊查询城市名的,查询省份的自己补全吧。

数据库结构如下




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值