DBExplorer使用和修改整理
DBExplorer使用和修改整理
Table of Contents
1 前言
DBExplorer是使用extjs框架的非常漂亮的数据库数据查询导出工具,支持很多数据库。但是在使用过程中遇到了很多问题,包括增加额外数据库选项,修改导出的文件格式,以及导出的文件乱码问题。本文主要总结下再修改过程中的一些内容。
2 DBExplorer介绍
DBExplorer是一个B/S架构的Web程序,基于JDBC连接数据库服务。它采用Extjs构建GUI,因此也具有和C/S程序一样良好的使用体验。 DBExplorer提供以下功能1:
- 支持多种数据库:Oracle10g、MS SqlServer 、MySQL、PostgreSQL、HSQLDB、Apache Derby。
- 支持多种浏览器:Internet Explorer 6+、FireFox 1.5+(PC, Mac)、Safari 3+、Opera 9+ (PC, Mac)。
- 支持SQL语句查询,后续还将推出可视化SQL语句生成以及SQL语法高亮。
- 支持数据查看并即时修改,修改是可自动读取外键参考、默认值、列约束等。
- 支持LOB数据的查看、下载以及修改。
- 支持数据导出成多种格式:CSV、PDF、HTML、SQL。
下载地址:http://jdbexplorer.googlecode.com/files/DBExplorer_0.2.rar 源码下载地址:http://jdbexplorer.googlecode.com/files/DBExplorer_0.2-src.zip
2.1 界面截图
登录截图
登录后截图
数据导出截图
3 问题整理
感谢曦之易夕 2的深入研究,现将问题整理如下
3.1 界面的导出格式名称变更
可以再deb\dataexportutils.js中214行中将boxLablel名称改变即可。
3.2 界面表名双击查询支持DB2
DBExplorer默认对DB2的支持不够好,在后台也没有针对DB2的特殊处理,如果默认具有Administrator用户的DB2数据库模式,那么是可以直接通过双击表名进行查询的,不然如AIX中新建Administrator模式是不行的,可以通过修改cn.com.qimingx.dbe.service.impl.HelperDBInfoServiceTable文件,将schema添加到查询语句中。
第88行 String sql = "SELECT * FROM " +name;改为 String sql = "SELECT * FROM " + schema+"."+name;
3.3 还原导出文件的后缀名
虽然该软件支持导出html,csv等多种格式,但是在导出以后会默认使用TMP文件名,将后缀自动去掉,导致下载以后需要用相应的软件打开或者重新添加后缀名与相关应用程序关联,非常不方便。可以通过注释cn.com.qimingx.dbe.action.DbeActionController中的32-35行代码还原后缀。
public void downfile(HttpServletRequest req, HttpServletResponse resp) { String target = req.getParameter("targetFile"); log.debug("call dbeAction.downfile.target:" + target); Assert.hasLength(target, "未指定目标文件..~~"); File file = workDirectory(req).getFileByName(target); if (file != null) { String name = file.getName(); /* 注释这三语句,还原文件名后缀 int idx = name.indexOf(".") + 1; if (idx > 0) { name = name.substring(idx); } */ download(resp, name, file); } else { sendError(resp, 500, "文件无法下载:" + target); } }
3.4 修改导出文件编码,csv文件分隔符
默认导出的csv文件是采用UTF-8编码的,这样在windows上用excel打开会出现乱码,而且默认导出的csv文件是采用分号分隔的,这样excel不能很好的识别,excel默认支持的csv格式是用逗号分隔的。修改如下: cn.com.qimingx.dbe.TableInfo;在源文件90行的位置。默认导出文件的后缀都是tmp格式的,需要改成相应格式。在源文件大约88行的样子。
//File file = wd.newFile(fileType, ".tmp"); File file = wd.newFile(fileType, "."+fileType);//修改后缀格式 OutputStream stream = null; try { stream = new FileOutputStream(file); // OutputStreamWriter writer = new OutputStreamWriter(stream, "utf-8"); OutputStreamWriter writer = new OutputStreamWriter(stream, "GBK");//改成GBK编码 BufferedWriter buffer = new BufferedWriter(writer); if (fileType.equalsIgnoreCase("CSV")) { // 生成文件内容.. makeCSVContent(buffer); } else if (fileType.equalsIgnoreCase("HTML")) { // 生成HTML文件 makeHTMLContent(buffer); } else if (fileType.equalsIgnoreCase("PDF")) { // 生成PDF格式的文件 makePDFContent(stream); } else { // 生成sql语句文件 makeSQLContent(buffer); }