如何将excel表格文件导成SQLite数据库文件(.xls-->.db)
2015-11-22 11:57
495 查看
导读:首先声明小编刚开始开发android只有4个月左右,所以有不足之处敬请各位指出,小编在此先行谢过。
最近由于公司项目需求需要将一些固定的数据放在本地,也就是app里面。通过查询资料决定用一个本地数据库文件(.db)来存储数据。所以需要知道怎样导入数据到该数据库文件,然后如何将其放到我的项目中。
大致思路:
先将数据生成表格形式(.xls格式 我用的是WPS表格),然后编码将其中的所有数据读出(我是将其读出放到了数组LinkedList中的),再然后就是创建数据库文件然后将数据放进去了,最后将该数据库文件复制粘贴到你的项目中即可。
图片:
相关准备工作:1、将要导入的表格文件(小编的是.xls格式的)。2、导入JXL.jar(excel文件操作用的,没有的话可以自行百度实在不行可以联系小编哦)。3、要放入数据库文件的项目。
下面开始详细步骤:
一、将xls文件即表格文件数据读出
1、直接上代码:
代码说明:
注释小编已经写得很清楚了,不过有一点需要注意的是那个表格文件的路径一定要正确啊。我的路径是/storage/sdcard0/tencent/QQfile_recv/xxx.xls ,小编是直接通过qq传的,所以路径用的是默认的。
数据准备工作已经完成了,接下来就是准备数据库文件接收他了,即将其导成.db文件。
二、获取新的数据库文件(.db)得操作对象
1、还是先上代码:
三、对新生成的数据库进行操作
1、通过第二步已经获取了新的数据库的操作对象,那么我们自然就可以对该数据库进行增删改查的操作,把不想要的数据删除掉,把需要的数据加进去;然后找到他的目录。将其复制粘贴到你的项目的目录res/raw/下面即可,不存在raw就直接创建就好,以后你就可以用第二步的同样方法获取对象进行操作了。
2、还是上点小编的代码:
代码说明:这是小编对放到项目中的数据库文件的部分相关操作,仅作参考哦。
心得:
这个小问题当初困了小编好几天的,现在好不容易搞定了,希望后面来的同志不要像我一样卡着浪费时间,所以写了这篇文章,希望对大家有所帮助。
最后附上联系方式有不明白的可以随时向小编求助哦,能帮我尽量帮哦!
QQ:1076880929
最近由于公司项目需求需要将一些固定的数据放在本地,也就是app里面。通过查询资料决定用一个本地数据库文件(.db)来存储数据。所以需要知道怎样导入数据到该数据库文件,然后如何将其放到我的项目中。
大致思路:
先将数据生成表格形式(.xls格式 我用的是WPS表格),然后编码将其中的所有数据读出(我是将其读出放到了数组LinkedList中的),再然后就是创建数据库文件然后将数据放进去了,最后将该数据库文件复制粘贴到你的项目中即可。
图片:
相关准备工作: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()); } } }
代码说明:这是小编对放到项目中的数据库文件的部分相关操作,仅作参考哦。
心得:
这个小问题当初困了小编好几天的,现在好不容易搞定了,希望后面来的同志不要像我一样卡着浪费时间,所以写了这篇文章,希望对大家有所帮助。
最后附上联系方式有不明白的可以随时向小编求助哦,能帮我尽量帮哦!
QQ:1076880929
相关文章推荐
- Oracle协议适配器错误解决办法
- MMM 之 MySQL
- mongodb--c#驱动数据插入demo
- 修改wamp mysql密码
- 商城数据库类
- 深入理解Oracle 的并行执行
- 17 Automatic SQL Tuning
- mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询
- 无法启动mysql服务,错误1067
- sql server 用户and角色笔记
- 点击scrollview里面的按钮更换tableview的内容(tableview内容来自sqlite3) iOS
- SQL Server 中关于EXCEPT和INTERSECT的用法
- Oracle并行详解
- 95.Oracle数据库SQL开发之 修改表内存——查询闪回
- 94.Oracle数据库SQL开发之 修改表内存——数据库事务的SERIALIZABLE事务
- 93.Oracle数据库SQL开发之 修改表内存——数据库事务的事务隔离级别
- 92.Oracle数据库SQL开发之 修改表内存——数据库事务的事务锁
- 91.Oracle数据库SQL开发之 修改表内存——数据库事务的并发事务
- 90.Oracle数据库SQL开发之 修改表内存——数据库事务的ACID特性
- Oracle 特殊字符模糊查询的方法