如何將excel表格檔案導成SQLite資料庫檔案(.xls-->.db)
導讀:首先宣告小編剛開始開發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