您的位置:首页 > 数据库

如何将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、直接上代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: