导读:首先声明小编刚开始开发android只有4个月左右,所以有不足之处敬请各位指出,小编在此先行谢过。
最近由于公司项目需求需要将一些固定的数据放在本地,也就是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());
}
}
}
代码说明:这是小编对放到项目中的数据库文件的部分相关操作,仅作参考哦。
心得:
这个小问题当初困了小编好几天的,现在好不容易搞定了,希望后面来的同志不要像我一样卡着浪费时间,所以写了这篇文章,希望对大家有所帮助。