package com.fh.util;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 说明:用于备份、还原数据库、在线编辑SQL
* 创建人:FH Q313596790
* 修改时间:2016年3月29日
* @version
*/
public class DbFH{
private static Log logger = LogFactory.getLog(DbFH.class);
private static Properties pros = getPprVue();
public static Map<String, String> backUpTableList = new ConcurrentHashMap<String, String>();
public static Map<String, String> recoverTableList = new ConcurrentHashMap<String, String>();
private static DbFH dbFH = new DbFH();
public static void main(String[] arg){
try {
String str = DbFH.getDbFH().backup("").toString();//调用数据库备份
System.out.println(FileUtil.getFilesize(str));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
public static DbFH getDbFH(){
return dbFH;
}
/**执行数据库备份入口
* @param tableName 表名
* @return
* @throws InterruptedException
* @throws ExecutionException
*/
public Object backup(String tableName) throws InterruptedException, ExecutionException {
if(null != backUpTableList.get(tableName)) return null;
backUpTableList.put(tableName, tableName); // 标记已经用于备份(防止同时重复备份,比如备份一个表的线程正在运行,又发来一个备份此表的命令)
ExecutorService pool = Executors.newFixedThreadPool(2);
Callable<Object> fhc = new DbBackUpCallable(tableName); //创建一个有返回值的线程
Future<Object> f1 = pool.submit(fhc); //启动线程
String backstr = f1.get().toString(); //获取线程执行完毕的返回值
pool.shutdown(); //关闭线程
return backstr;
}
/**执行数据库还原入口
* @param tableName 表名
* @param sqlFilePath 备份文件存放完整路径
* @return
* @throws InterruptedException
* @throws ExecutionException
*/
public Object recover(String tableName,String sqlFilePath) throws InterruptedException, ExecutionException {
if(null != recoverTableList.get(tableName)) return null;
recoverTableList.put(tableName, tableName); // 标记已经用于还原(防止同时重复还原,比如还原一个表的线程正在运行,又发来一个还原此表的命令)
ExecutorService pool = Executors.newFixedThreadPool(2);
Callable<Object> fhc = new DbRecoverCallable(tableName,sqlFilePath); //创建一个有返回值的线程
Future<Object> f1 = pool.submit(fhc); //启动线程
String backstr = f1.get().toString(); //获取线程执行完毕的返回值
pool.shutdown(); //关闭线程
return backstr;
}
/**获取本数据库的所有表名(通过PageData)
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public static Object[] getTables(PageData pd) throws ClassNotFoundException, SQLException{
String dbtype = pd.getString("dbtype"); //数据库类型
String username = pd.getString("username"); //用户名
String password = pd.getString("password"); //密码
String address = pd.getString("dbAddress"); //数据库连接地址
String dbport = pd.getString("dbport"); //端口
String databaseName = pd.getString("databaseName"); //数据库名
Connection conn = DbFH.getCon(dbtype,username,password,address+":"+dbport,databaseName);
if("oracle".equals(dbtype)){databaseName = username.toUpperCase();}
Object[] arrOb = {databaseName,DbFH.getTablesByCon(conn, "sqlserver".equals(dbtype)?null:databaseName),dbtype};
return arrOb;
}
/**获取本数据库的所有表名(通过配置文件)
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public static Object[] getTables() throws ClassNotFoundException, SQLException{
String dbtype = pros.getProperty("dbtype"); //数据库类型
String username = pros.getProperty("username"); //用户名
String password = pros.getProperty("password"); //密码
String address = pros.getProperty("dbAddress"); //数据库连接地址
String dbport = pros.getProperty("dbport"); //端口
String databaseName = pros.getProperty("databaseName"); //数据库名
Connection conn = DbFH.getCon(dbtype,username,password,address+":"+dbport,databaseName);
if("oracle".equals(dbtype)){databaseName = username.toUpperCase();}
Object[] arrOb = {databaseName,DbFH.getTablesByCon(conn, "sqlserver".equals(dbtype)?null:databaseName),dbtype};
return arrOb;
}
/**
* @return 获取conn对象(通过配置文件)
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getFHCon() throws ClassNotFoundException, SQLException{
String dbtype = pros.getProperty("dbtype"); //数据库类型
String username = pros.getProperty("username"); //用户名
String password = pros.getProperty("password"); //密码
String address = pros.getProperty("dbAddress"); //数据库连接地址
String dbport = pros.getProperty("dbport"); //端口
String databaseName = pros.getProperty("databaseName"); //数据库名
return DbFH.getCon(dbtype,username,password,address+":"+dbport,databaseName);
}
/**
* @return 获取conn对象(通过PageData)
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getFHCon(PageData pd) throws ClassNotFoundException, SQLException{
String dbtype = pd.getString("dbtype"); //数据库类型
String username = pd.getString("username"); //用户名
String password = pd.getString("password"); //密码
String address = pd.getString("dbAddress"); //数据库连接地址
String dbport = pd.getString("dbport"); //端口
String databaseName = pd.getString("databaseName"); //数据库名
return DbFH.getCon(dbtype,username,password,address+":"+dbport,databaseName);
}
/**
* @param dbtype 数据库类型
* @param username 用户名
* @param password 密码
* @param dburl 数据库连接地址:端口
* @param databaseName 数据库名
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public static Connection getCon(String dbtype,String username,String password,String dburl,String databaseName) throws SQLException, ClassNotFoundException{
if("mysql".equals(dbtype)){
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://"+dburl+"/"+databaseName+"?user="+username+"&password="+password);
}else if("oracle".equals(dbtype)){
Class.forName("oracle.jdbc.driver.OracleDriver");
return DriverManager.getConnection("jdbc:oracle:thin:@"+dburl+":"+databaseName, username, password);
}else if("sqlserver".equals(dbtype)){
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
return DriverManager.getConnection("jdbc:sqlserver://"+dburl+"; DatabaseName="+databaseName, username, password);
}else{
return null;
}
}
/**获取某个conn下的所有表
* @param conn 数据库连接对象
* @param schema mysql:数�
没有合适的资源?快使用搜索试试~ 我知道了~
学生资助管理系统-毕业设计.zip
共2000个文件
js:461个
gif:438个
java:207个
需积分: 5 0 下载量 192 浏览量
2024-04-22
18:21:07
上传
评论
收藏 94.4MB ZIP 举报
温馨提示
学生资助管理系统-毕业设计
资源推荐
资源详情
资源评论
收起资源包目录
学生资助管理系统-毕业设计.zip (2000个子文件)
ext-neptune.css 526KB
ext-neptune-debug.css 526KB
ace.css 473KB
ext-all-scoped-debug.css 424KB
ext-ie-scoped-debug.css 392KB
ext-sandbox-debug.css 389KB
ext-all-debug.css 384KB
ext-all-gray-debug.css 374KB
ext-all-access-debug.css 364KB
ext-ie-debug.css 353KB
ext-standard-scoped-debug.css 310KB
ext-standard-debug.css 281KB
ext-all-scoped.css 257KB
ext-sandbox.css 238KB
ext-all.css 234KB
ext-ie-scoped.css 230KB
ext-all-gray.css 224KB
ext-all-access.css 218KB
ext-ie.css 207KB
ext-standard-scoped.css 174KB
ext-standard.css 158KB
ace-rtl.css 149KB
bootstrap.css 132KB
ace-part2.css 129KB
bootstrap.min.css 120KB
bootstrap.css 118KB
bootstrap.min.css 106KB
bootstrap.min.css 103KB
ace-skins.css 99KB
bootstrap.min.css 98KB
style.min.css 97KB
style.css 72KB
viewer.css 49KB
animate.min.css 46KB
icon.css 45KB
ueditor.css 43KB
ueditor.css 41KB
ueditor.min.css 34KB
form.css 34KB
datepicker.css 33KB
ueditor.min.css 33KB
font-awesome.css 26KB
style-common.css 25KB
fullcalendar.css 22KB
video-js.css 21KB
video-js.css 21KB
bootstrap-editable.css 21KB
font-awesome.css 19KB
select2.css 19KB
jquery-ui.css 18KB
image.css 18KB
bootstrap-responsive.min.css 16KB
bootstrap-theme.css 15KB
video.css 15KB
attachment.css 14KB
bootstrap-theme.min.css 13KB
chosen.css 13KB
ui.jqgrid.css 13KB
video-js.min.css 11KB
video-js.min.css 11KB
dropzone.css 11KB
ace-ie.css 11KB
style-editor.css 10KB
style.css 9KB
extjs.css 8KB
style.css 8KB
ng-grid-2.0.7.min.css 7KB
shCoreDefault.css 7KB
shCoreDefault.css 7KB
daterangepicker.css 6KB
zTreeStyle.css 6KB
position.css 6KB
style.css 6KB
bootstrap-datetimepicker.css 6KB
zTreeStyle.css 6KB
daterangepicker-bs3.css 5KB
ztree.css 5KB
fullcalendar.print.css 5KB
basic.css 5KB
ace.onpage-help.css 5KB
colorbox.css 4KB
video.css 4KB
matrix-login.css 4KB
jquery-ui.custom.css 4KB
scrawl.css 4KB
bootstrap-timepicker.css 3KB
style.css 3KB
zoomimage.css 3KB
editor.css 3KB
codemirror.css 3KB
form.css 3KB
charts.css 3KB
statusbar.css 3KB
image.css 2KB
colorpicker.css 2KB
background.css 2KB
style.css 2KB
GroupTabPanel.css 2KB
prettify.css 2KB
jasmine.css 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
生瓜蛋子
- 粉丝: 3824
- 资源: 5370
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功