偷懒工具设计之sql2Excel

本文介绍了一种实用的方法,通过编写Java程序将数据库查询结果自动导出为Excel文件,便于数据分析。程序分为两大部分:一是通过JDBC连接数据库并获取数据;二是使用jxl库将数据写入Excel。

 偷懒工具设计之sql2Excel

        今天在公司陪山东客户调试,远程登录,我在linux下什么工具都没有,用ssh登录服务器,直接用mysql查询数据库,提出记录中的所有汉字全是乱码。哎,可恶的公司,不让我用windows,要不我就可以用putty或者EMS了,我ft!
         甚是不爽之下,我决定自己写个工具了,把客户数据库中的数据全部提取并保存到Excel中,这样我不就可以一目了然了嘛,嘿嘿,好吧,那我就写一个工具吧。

第一部分就是谁都会的jdbc操作,连接数据库,提取数据集合。
    Connection con;
    Statement state;
    
/**初始化连接
     * 
@param serverIp
     * 
@param dataBase
     * 
@param userName
     * 
@param password
     * 
@throws ClassNotFoundException
     * 
@throws SQLException
     
*/

    
public   void  init(String serverIp,String dataBase,String userName,String password)  throws  ClassNotFoundException, SQLException {
        Class.forName(
"com.mysql.jdbc.Driver");
        
//配置数据源
        String url="jdbc:mysql://"+serverIp+"/"+dataBase+"?useUnicode=true&characterEncoding=GB2312";
        con
=DriverManager.getConnection(url,userName,password); 
    }

    
/**得到查询结果集
     * 
@param sql
     * 
@return
     * 
@throws SQLException
     
*/

    
public  ResultSet getResultSet(String sql)  throws  SQLException {
        state 
= con.createStatement();
        ResultSet res 
= state.executeQuery(sql);
        
return res;
    }

    
/**关闭连接
     * 
@throws SQLException
     
*/

    
public   void  close()  throws  SQLException {
        
if(con!=null)
            con.close();
        
if(state!=null)
            state.close();
    }

第二部分就是把ResultSet中的记录写入一个Excel文件
操作Excel,我用的是jxl,不熟的同学可以参考: 利用java操作Excel文件
     /**将查询结果写入Excel文件中
     * 
@param rs
     * 
@param file
     * 
@throws SQLException
     
*/

    
public   void  writeExcel(ResultSet rs,File file)  throws  SQLException {
          WritableWorkbook wwb 
= null;
            
try{
                
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
                wwb = Workbook.createWorkbook(file);
            }
 catch (IOException e){
                e.printStackTrace();
            }

            
if(wwb!=null){
                WritableSheet ws 
= wwb.createSheet("sheet1"0);
                
int i=0;
                
while(rs.next()){
                    Label label1 
= new Label(0, i, rs.getString("id"));
                    Label label2 
= new Label(1, i, rs.getString("category"));
                     
try {
                        ws.addCell(label1);
                        ws.addCell(label2);
                    }
 catch (RowsExceededException e) {
                        e.printStackTrace();
                    }
 catch (WriteException e) {
                        e.printStackTrace();
                    }

                    i
++;
                }
    

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

            }

    }

测试程序:
        Sql2Excel se  =   new  Sql2Excel();
        
try   {
            se.init(
"127.0.0.1","mydabase""root""1234");
            ResultSet rs 
= se.getResultSet("select id,category from xx ");
            se.writeExcel(rs, 
new File("/root/sql2excel.xls"));
            se.close();
        }
  catch  (ClassNotFoundException e)  {
            e.printStackTrace();
        }
  catch  (SQLException e)  {
            e.printStackTrace();
        }


         呵呵,比较简单吧,不过还是很有用的,其实那些数据库查询工具EMS,Mysql Query Browser之类的和这个差不多,掌握了原理,我们也可以自己开发查询工具,备份工具。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值