偷懶工具設計之sql2Excel 今天在公司陪山東客戶(hù)調試,遠程登錄,我在linux下什么工具都沒(méi)有,用ssh登錄服務(wù)器,直接用mysql查詢(xún)數據庫,提出記錄中的所有漢字全是亂碼。哎,可惡的公司,不讓我用windows,要不我就可以用putty或者EMS了,我ft!
甚是不爽之下,我決定自己寫(xiě)個(gè)工具了,把客戶(hù)數據庫中的數據全部提取并保存到Excel中,這樣我不就可以一目了然了嘛,嘿嘿,好吧,那我就寫(xiě)一個(gè)工具吧。
第一部分就是誰(shuí)都會(huì )的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);
}
/** *//**得到查詢(xún)結果集
* @param sql
* @return
* @throws SQLException
*/
public ResultSet getResultSet(String sql) throws SQLException...{
state = con.createStatement();
ResultSet res = state.executeQuery(sql);
return res;
}
/** *//**關(guān)閉連接
* @throws SQLException
*/
public void close() throws SQLException...{
if(con!=null)
con.close();
if(state!=null)
state.close();
} 第二部分就是把ResultSet中的記錄寫(xiě)入一個(gè)Excel文件操作Excel,我用的是jxl,不熟的同學(xué)可以參考:
利用java操作Excel文件 /** *//**將查詢(xún)結果寫(xiě)入Excel文件中
* @param rs
* @param file
* @throws SQLException
*/
public void writeExcel(ResultSet rs,File file) throws SQLException...{
WritableWorkbook wwb = null;
try...{
//首先要使用Workbook類(lèi)的工廠(chǎng)方法創(chuàng )建一個(gè)可寫(xiě)入的工作薄(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 ...{
//從內存中寫(xiě)入文件中
wwb.write();
//關(guān)閉資源,釋放內存
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();
} 呵呵,比較簡(jiǎn)單吧,不過(guò)還是很有用的,其實(shí)那些數據庫查詢(xún)工具EMS,Mysql Query Browser之類(lèi)的和這個(gè)差不多,掌握了原理,我們也可以自己開(kāi)發(fā)查詢(xún)工具,備份工具。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1624405