导读:首先声明小编刚开始开发android只有4个月左右,所以有不足之处敬请各位指出,小编在此先行谢过。
最近由于公司项目需求需要将一些固定的数据放在本地,也就是app里面。通过查询资料决定用一个本地数据库文件(.db)来存储数据。所以需要知道怎样导入数据到该数据库文件,然后如何将其放到我的项目中。

大致思路:

先将数据生成表格形式(.xls格式 我用的是WPS表格),然后编码将其中的所有数据读出(我是将其读出放到了数组LinkedList中的),再然后就是创建数据库文件然后将数据放进去了,最后将该数据库文件复制粘贴到你的项目中即可。

图片:

excel 转换mysql语句 在线_excel 转换mysql语句 在线


excel 转换mysql语句 在线_android_02


excel 转换mysql语句 在线_数据库_03

相关准备工作:1、将要导入的表格文件(小编的是.xls格式的)。2、导入JXL.jar(excel文件操作用的,没有的话可以自行百度实在不行可以联系小编哦)。3、要放入数据库文件的项目。

下面开始详细步骤:
一、将xls文件即表格文件数据读出
1、直接上代码:

public class SelectExcelFile {
    private String fileDir;                                 //文件路径
    private String KEYFIRST = "English";                    //表格内容
    private String KEYTWO = "Chinese";
    private String KEYTHREE = "Number";
    private LinkedList<HashMap<String, String>> linkedList; //存放读出的数据的数组

    public SelectExcelFile(String file) {
        linkedList = null;
        this.fileDir = file;
        linkedList = new LinkedList<HashMap<String, String>>();

        getAllByExcel();
    }

    public LinkedList<HashMap<String, String>> getLinkedList() {
        return linkedList;
    }

    /**
     * selection data of the xls file
     */
    private void getAllByExcel(){
        try {
            Workbook rwb = Workbook.getWorkbook(new File(fileDir));
            Sheet rs = rwb.getSheet(0);
            int clos = rs.getColumns();         //所有列
            int rows = rs.getRows();            //所有行

            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < clos; j++) {//一行行的读出又有表格中的数据
                    HashMap<String, String> hashMap = new HashMap<String, String>();

                    String first    = rs.getCell(j++, i).getContents();
                    String two      = rs.getCell(j++, i).getContents();
                    String three    = rs.getCell(j++, i).getContents();
                    hashMap.put(KEYFIRST, first);
                    hashMap.put(KEYTWO, two);
                    hashMap.put(KEYTHREE, three);
                    linkedList.addFirst(hashMap);
                    /*打印日志判断独处的内容(LogUtil是我自己写的打印日志的类)*/
                    LogUtil.logw(getClass().getName(), "first:" + first + " two:" + two +
                            " three:" + "" +i);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            LogUtil.loge(getClass().getName(), e.getMessage());
        }
    }
}

代码说明:
注释小编已经写得很清楚了,不过有一点需要注意的是那个表格文件的路径一定要正确啊。我的路径是/storage/sdcard0/tencent/QQfile_recv/xxx.xls ,小编是直接通过qq传的,所以路径用的是默认的。

数据准备工作已经完成了,接下来就是准备数据库文件接收他了,即将其导成.db文件。

二、获取新的数据库文件(.db)得操作对象
1、还是先上代码:

public class DBOpenHelperLocate {
	public final String DBNAME 			= "xxx.db"; //生成的新数据库名称
	public final String PACKAGE_NAME 	= "xxx.xxxx.xxx";//你的项目包名
	public final String DATABASE_PATH 	= "/data"
			+ Environment.getDataDirectory().getAbsolutePath() + "/"
			+ PACKAGE_NAME; //生成的新数据库放置的路径(放在内存储卡的手机root过的可以直接获取)
//public final String DATABASE_PATH	= "/storage/sdcard0/tencent/QQfile_recv";生成的新数据库放置的路径(这是我用的,我的手机没root过所以放在外边方便生成后复制粘贴到我的项目中)
	private SQLiteDatabase db;//数据库操作对象

	public DBOpenHelperLocate(Context context) {
		openDatabase(context);
	}

	public SQLiteDatabase getDb() {
		return db;
	}

/**
* 通过该方法获取新的数据库的操作对象
*/
	private SQLiteDatabase openDatabase(Context context) {
		try {
			String databaseFilename = DATABASE_PATH + "/" + DBNAME;
			File dir = new File(DATABASE_PATH);
			if (!dir.exists()) {//如果该路径不存在则创建
				dir.mkdir();
			}
			if (!(new File(databaseFilename)).exists()) {//如果该数据库文件不存在,则创建(就是你最后需要放到项目中的新数据库文件)
				InputStream is = context.getResources().openRawResource(R.raw.hyd_locate);//获取原本数据库的输入流(读取原本的数据到新数据库中用,如果不想存数据只想生成个空的新数据库文件的话,看着来吧)
				FileOutputStream fos = new FileOutputStream(databaseFilename);
				byte[] buffer = new byte[8192];
				int count;
				while ((count = is.read(buffer)) > 0) {
					fos.write(buffer, 0, count);
				}

				fos.close();
				is.close();
			}
			db = SQLiteDatabase.openOrCreateDatabase(
					databaseFilename, null);
			return db;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

三、对新生成的数据库进行操作
1、通过第二步已经获取了新的数据库的操作对象,那么我们自然就可以对该数据库进行增删改查的操作,把不想要的数据删除掉,把需要的数据加进去;然后找到他的目录。将其复制粘贴到你的项目的目录res/raw/下面即可,不存在raw就直接创建就好,以后你就可以用第二步的同样方法获取对象进行操作了。
2、还是上点小编的代码:

public class ManageLocateData {
    private SQLiteDatabase          dbLocate;
    private String tableProvince    = "province";
    private String tableCity        = "city";
    private static HashMap<String, String> province;
    private static HashMap<String, String> city;

    public ManageLocateData() {
        dbLocate    = HiydApplication.dbOpenHelperLocate.getDb();
        province    = new HashMap<String, String>();
        city        = new HashMap<String, String>();

        initData();
    }

    public static HashMap<String, String> getProvince() {
        return province;
    }

    public static HashMap<String, String> getCity(String gco) {
        HashMap<String, String> hash = new HashMap<String, String>();
        String current = gco.substring(0, 5);
        Iterator<Map.Entry<String, String>> iter = city.entrySet().iterator();

        while (iter.hasNext()) {
            Map.Entry<String, String> entry = iter.next();
            String key 		= entry.getKey();
            String key1 	= key.substring(0, 5);
            String value 	= entry.getValue();

            if (key1.equals(current)) {
                hash.put(key, value);
            }
        }

        return hash;
    }

    public static String getProvinceStr(String number) {
        if (number == null || number.length() < 5) {
            return null;
        }
        number = number.substring(0, 5);
        String name = province.get(number);
        LogUtil.logw("getProvinceStr", "name=" + name + "||number=" + number);

        return name;
    }

    public static String getCityStr(String number) {
        if (number == null || number.length() < 7) {
            return null;
        }
        String name = city.get(number);
        LogUtil.logw("getCityStr", "name=" + name + "||number=" + number);

        return name;
    }

    /**
     * load data
     */
    private void initData() {
        if (GlobalVar.language.endsWith("en")) {

        } else {
            getDataOfProvinceChina();
            getDataOfCityChina();
        }
    }

    private void getDataOfProvinceChina() {
        String sql = "select Chinese, Number from " + tableProvince + " order by Number";
        Cursor cursor;

        try {
            cursor = dbLocate.rawQuery(sql, new String[]{ });

            while (cursor.moveToNext()) {
                String chinese = cursor.getString(cursor.getColumnIndex("Chinese"));
                String number = cursor.getString(cursor.getColumnIndex("Number"));

                if (number.startsWith("001")) {
                    province.put(number, chinese);
                }
            }
            if (province == null)
                LogUtil.logw(getClass().getName(), "province is null");
        } catch (Exception e) {
            LogUtil.loge(getClass().getName(), e.getMessage());
        }
    }

    private void getDataOfCityChina() {
        String sql = "select Chinese, Number from " + tableCity + " order by Number";
        Cursor cursor;

        try {
            cursor = dbLocate.rawQuery(sql, new String[]{ });

            while (cursor.moveToNext()) {
                String chinese = cursor.getString(cursor.getColumnIndex("Chinese"));
                String number = cursor.getString(cursor.getColumnIndex("Number"));

                if (number.startsWith("001")) {
                    city.put(number, chinese);
                }
            }
            if (city == null)
                LogUtil.logw(getClass().getName(), "city is null");
        } catch (Exception e) {
            LogUtil.loge(getClass().getName(), e.getMessage());
        }
    }
}

代码说明:这是小编对放到项目中的数据库文件的部分相关操作,仅作参考哦。

心得:
这个小问题当初困了小编好几天的,现在好不容易搞定了,希望后面来的同志不要像我一样卡着浪费时间,所以写了这篇文章,希望对大家有所帮助。