闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞鐟滃繘寮抽敃鍌涚厱妞ゎ厽鍨垫禍婵嬫煕濞嗗繒绠抽柍褜鍓欑粻宥夊磿闁单鍥敍濠婂懐鐒奸柣搴秵閸嬩焦绂嶅⿰鍫熺厸闁告劑鍔岄埀顒傛暬楠炲繘鍩勯崘褏绠氬銈嗗姂閸婃洟寮搁幋婢㈠酣宕惰闊剟鏌熼鐣屾噰妞ゃ垺妫冨畷鐔煎Ω閵夈倕顥氶柣鐔哥矊缁绘帡宕氶幒鎾剁瘈婵﹩鍓涢娲⒑閹稿孩鐓ラ柛妯荤矒瀹曟垿骞樼紒妯绘珖闂侀€炲苯澧撮柟顕€绠栭弫鎾绘偐閼碱剦鍚嬫俊鐐€栧Λ浣规叏閵堝鏁婇柡鍥ュ灪閳锋帒霉閿濆懏鎲哥紒澶屽劋娣囧﹪顢曢姀鈥充淮闂佽鍠氶崑銈夊极閸愵喖纾兼慨妯块哺閻擄綁姊绘担鍝ョШ婵☆偄娼¢幃鐐烘晝閸屾稑浜楅梺闈涱槴閺呮粓鎮¢悢鍏肩厸闁搞儮鏅涙禒婊堟煃瑜滈崜娆忥耿闁秴鐒垫い鎺嶈兌閸熸煡鏌熼崙銈嗗     婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i姀鐘差棌闁轰礁锕弻鈥愁吋鎼粹€崇闂傚倸鍋嗛崹閬嶅Φ閸曨垰鍐€闁靛ě鍛帎缂傚倷娴囩紙浼村磹濠靛钃熼柨婵嗩槹閺呮煡鏌涘☉鍗炴灍闁圭兘浜堕幃妤冩喆閸曨剛顦ㄩ梺缁樻惈缁绘繂顕f繝姘亜閻炴稈鈧厖澹曞┑鐐村灦椤忎即骞嬮敃鈧壕鍧楁煛閸モ晛鏋旂紒鐘荤畺閺岀喓鈧稒岣块幊鍐煟韫囧﹥娅婇柡宀嬬秮楠炴ḿ鈧潧鎲¢崚娑㈡⒑閸濆嫭婀伴柣鈺婂灦閻涱噣宕堕鈧粈鍌炴煕濠靛嫬鍔滈柡鍛偢濮婄粯鎷呴搹鐟扮闂佺懓鎲¢幃鍌炪€侀弽銊ョ窞濠电姴瀛╃紞搴♀攽閻愬弶鈻曞ù婊勭矒楠炴垿鎳滈悙閫涚盎闂佽宕樺▔娑欑濠婂啠鏀介柍鈺佸暞閵囨繃鎱ㄦ繝鍛仩闁瑰弶鎸冲畷鐔碱敇閻旂ǹ鏅搁梺璇叉唉椤煤閻斾赴缂氱憸鏃堛€佸璺何ㄩ柨鏂垮⒔閻﹀牓姊洪幖鐐插姌闁告柨绉撮埢宥夊閵堝棌鎷洪柣鐘充航閸斿苯鈻嶉幇鐗堢厵闁告垯鍊栫€氾拷

45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样在虚拟主机环境下备份数据库并且导出到EXCEL?

怎么样在虚拟主机环境下备份数据库并且导出到EXCEL?

2016-09-02 12:05:13 来源:www.45fan.com 【

怎么样在虚拟主机环境下备份数据库并且导出到EXCEL?

在虚拟主机的环境下,因为没有管理员权限,只有数据库使用权限,定时备份SQL数据是

个比较麻烦的问题。解决思路如下:(仅对SQL2000有效)

1. 利用T-SQL备份数据库到指定目录,文件名根据日期指定。

2. 利用Resin的定时功能,定时执行备份。

3. 用户定时下载备份并且删除过期备份。

导出全部数据到Excel也比较实用。下面提供的方法可以导出库中的全部表,也可以指定

几个表导出。注意:

1. 因为是导出全部数据,在数据比较多的情况下慎用。

2. 理论上应该适用各种JDBC数据库,仅对SQL2000测试过

3. 对于B/S下载,建议不要在服务器上生成文件,以免造成垃圾文件。直接从HTTP的Response中取得OutputStream进行输出。

4. Excel操作的API请到这里下载:http://www.andykhan.com/jexcelapi/

package steeven;

import jxl.write.*;

import java.util.*;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.Types;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.text.DateFormat;

import java.io.*;

/**

* <p>Title: 数据库备份</p>

* <p>Description: 在Java中备份数据库</p>

* @author steeven

* @version 1.0

*/

public class DBackup{

Context ctx ;

public DBackup(Context ctx) {

this.ctx = ctx;

}

/**

* 备份SQL2000数据库到文件,整个数据库备份

* 文件名后面将追加备份年月日。例如:c:/dbBackup/mydb031109

* @param file 导出的文件名全路径。例如:"c://dbBackup//mydb"

*/

public void backup(String dbName, String file)throws SQLException{

String sql = "BACKUP DATABASE ["+dbName+"] TO DISK = N'";

sql += file + new SimpleDateFormat("yyMMdd").format(new Date());

sql += "' WITH NOINIT , NOUNLOAD , NAME = N'lvdong', NOSKIP ,

STATS = 10, NOFORMAT";

Statement stmt = ctx.getConnection().createStatement();

stmt.executeUpdate(sql);

}

/**

* 导出整个数据库到Excel

* @param conn 数据库连接

* @param out 输出Stream

*/

public static void db2Excel(Connection conn,OutputStream out)throws

Exception{

db2Excel(conn,out,getTables(conn));

}

/**

* 导出数据库中指定的表名到Excel

* @param conn 数据库连接

* @param out 输出Stream

* @param tables 表名

* @throws Exception

*/

public static void db2Excel(Connection conn,OutputStream out,List

tables)throws Exception{

WritableWorkbook wb = jxl.Workbook.createWorkbook(out);

for (int i = 0; i < tables.size(); i++) {

WritableSheet sheet = wb.createSheet(tables.get(i).toString(),i);

writeSheet(sheet,tables.get(i).toString(),conn);

}

wb.write();

wb.close();

}

/**

* 导出表数据到Excel的sheet

*/

public static void writeSheet(

WritableSheet sheet,String table,Connection conn)

throws Exception

{

//取得所有表数据

String sql = "select * from "+DB.ESC1+table+DB.ESC2;

ResultSet rs = conn.createStatement().executeQuery(sql);

//根据ResultSet的MetaData取得表头,列数,列宽

java.sql.ResultSetMetaData meta = rs.getMetaData();

int n = meta.getColumnCount();

int row = 0;

WritableCellFormat fmt = new WritableCellFormat();

fmt.setBackground(jxl.format.Colour.YELLOW);

for (int i = 0; i < n; i++){

//导出表头

sheet.addCell(new Label(i, row, meta.getColumnLabel(i + 1),fmt));

//设定列宽

// sheet.setColumnView(i,meta.getColumnDisplaySize(i+1));

}

row++;

while(rs.next()){

for (int i = 0; i < n; i++){

//根据列的类型决定Excel中对应的Cell类型,缺省为文本。

WritableCell cell ;

switch(meta.getColumnType(i+1)){

case Types.BIT:

case Types.BIGINT:

case Types.BOOLEAN:

case Types.DECIMAL:

case Types.FLOAT:

case Types.INTEGER:

case Types.NUMERIC:

case Types.REAL:

case Types.SMALLINT:

case Types.TINYINT:

double val = rs.getDouble(i+1);

if (rs.wasNull()) cell = new jxl.write.Blank(i,row);

cell = new jxl.write.Number(i, row, val);

break;

case Types.DATE:

case Types.TIME:

case Types.TIMESTAMP:

Date date = rs.getDate(i + 1);

if (rs.wasNull()) cell = new jxl.write.Blank(i,row);

else cell = new jxl.write.DateTime(i, row, date);

break;

default:

cell = new Label(i, row, rs.getString(i + 1));

} //end of switch

sheet.addCell(cell);

}//end of for each column

row++;

}//end of while(rs.next())

}

/**

* 从Connection的MetaData取得所有数据表的名称

*/

public static List getTables(Connection conn)throws Exception{

ResultSet rs = conn.getMetaData().getTables(

null,null,null,new String[]{"Table"});

List list = new ArrayList();

while(rs.next())

list.add(rs.getString(3));

rs.close();

return list;

}

public static void main(String[] args) throws Exception{

Connection conn = DB.getConn();

FileOutputStream out = new FileOutputStream("c://test.xls");

db2Excel(conn,out);

out.close();

conn.close();

}

}

 

本文地址:http://www.45fan.com/a/question/71192.html
Tags: 环境 数据库 备份
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部