今天在公司陪山东客户调试,远程登录,我在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,不熟的同学可以参考:
http://www.iteye.com/topic/55844?page=1
/** *//**将查询结果写入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之类的和这个差不多,掌握了原理,我们也可以自己开发查询工具,备份工具。