在虚拟主机的环境下,因为没有管理员权限,只有数据库使用权限,定时备份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();     } }  
 
  |