将SQLite中的数据转换为Excel表

48 篇文章 0 订阅

此程序能将指定SQlite数据库中的数据转换为Excel表格形式

package zhaoxing.android.tool;


import java.io.File;

import java.io.IOException;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DatabaseDump {
	private String mDestXmlFilename;
	private SQLiteDatabase mDb;


	public DatabaseDump(SQLiteDatabase db, String destXml) {
		mDb = db;
		mDestXmlFilename = destXml;
	}

	public void exportData() {

		try {

		//	Log.i("mdb", mDb.getPath());
			// get the tables out of the given sqlite database
			String sql = "SELECT * FROM sqlite_master";

			Cursor cur = mDb.rawQuery(sql, new String[0]);
			cur.moveToFirst();

			String tableName;
			while (cur.getPosition() < cur.getCount()) {
				tableName = cur.getString(cur.getColumnIndex("name"));

				// don't process these two tables since they are used
				// for metadata
				if (!tableName.equals("android_metadata")
						&& !tableName.equals("sqlite_sequence")) {
					writeExcel(tableName);
				}

				cur.moveToNext();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 生成一个Excel文件
	 * 
	 * @param fileName
	 *            要生成的Excel文件名
	 */
	public void writeExcel(String tableName) {
		WritableWorkbook wwb = null;
		String fileName;
		fileName = "/sdcard/QuestionData/" + tableName + ".xls";
		int r = 0;

		String sql = "select * from " + tableName;
		Cursor cur = mDb.rawQuery(sql, new String[0]);
		int numcols = cur.getColumnCount();
		int numrows = cur.getCount();
		// Log.i("row", numrows + "");
		// Log.i("col", numcols + "");

		String records[][] = new String[numrows + 1][numcols];// 存放答案,多一行标题行

		if (cur.moveToFirst()) {
			while (cur.getPosition() < cur.getCount()) {
				for (int c = 0; c < numcols; c++) {
					if (r == 0) {
						records[r][c] = cur.getColumnName(c);
						records[r + 1][c] = cur.getString(c);
					} else {
						records[r + 1][c] = cur.getString(c);
					}
				//	Log.i("value" + r + " " + c, records[r][c]);
				}
				cur.moveToNext();
				r++;
			}

			cur.close();
		}
		try {
			// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
			wwb = Workbook.createWorkbook(new File(fileName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (wwb != null) {
			// 创建一个可写入的工作表
			// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
			WritableSheet ws = wwb.createSheet("sheet1", 0);

			// 下面开始添加单元格
			for (int i = 0; i < numrows + 1; i++) {
				for (int j = 0; j < numcols; j++) {
					// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
					Label labelC = new Label(j, i, records[i][j]);
			//		Log.i("Newvalue" + i + " " + j, records[i][j]);
					try {
						// 将生成的单元格添加到工作表中
						ws.addCell(labelC);
					} catch (RowsExceededException e) {
						e.printStackTrace();
					} catch (WriteException e) {
						e.printStackTrace();
					}

				}
			}

			try {
				// 从内存中写入文件中
				wwb.write();
				// 关闭资源,释放内存
				wwb.close();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (WriteException e) {
				e.printStackTrace();
			}
		}
	}
}


要将Excel文件导入SQLite3,通常需要经过以下步骤: 1. **读取Excel文件**: - 使用Python的`pandas`库来读取Excel文件。`pandas`提供了`read_excel`函数,可以方便地读取`.xls`或`.xlsx`格式的Excel文件。 2. **数据处理**(如果需要): - 根据实际需求,可能需要对读取的数据进行清洗和转换,比如处理缺失值、格式化日期时间、转换数据类型等。 3. **连接SQLite数据库**: - 使用`sqlite3`库来创建或连接到SQLite数据文件。如果已存在,可能需要先删除或者清空旧数据,如果不存在,则需要创建。 4. **将数据导入SQLite**: - 使用`pandas`的`to_sql`方法,可以将DataFrame直接导入到SQLite。这个方法会处理好数据类型的转换,并且能够处理好数据的插入。 下面是一个简单的代码示例: ```python import pandas as pd import sqlite3 # 指定Excel文件路径和数据文件路径 excel_path = 'example.xlsx' db_path = 'example.db' # 读取Excel文件 df = pd.read_excel(excel_path) # 连接到SQLite数据库(如果不存在则创建,存在则覆盖) conn = sqlite3.connect(db_path) df.to_sql('your_table_name', conn, if_exists='replace', index=False) # 关闭数据库连接 conn.close() ``` 注意,使用`to_sql`方法时,如果已存在,`if_exists='replace'`参数会删除旧并创建一个,如果想保留旧数据只添加数据可以使用`if_exists='append'`参数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值