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
* 创建人:
* 修改时间: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="+d
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
医院挂号系统是一款专为医疗机构设计的在线预约挂号平台,主要功能包括患者在线挂号、医生排班管理、预约查询以及挂号费用处理等。该系统旨在简化患者的挂号流程,优化医院的门诊管理,减少患者现场等待时间,并提升整体的医疗服务效率。 在前端部分,系统采用了微信小程序技术。小程序具有轻量化、便捷接入、无需安装卸载等优势,对用户友好,能够快速适配各种型号的智能设备。前端页面使用了JSP技术结合HTML、CSS和JavaScript,使得前端界面具有良好的交互性和视觉效果。后端选择了SSM(Spring+Spring MVC+MyBatis)框架组合,致力于实现业务逻辑及数据库交互的高效处理。综上所述,选择微信小程序技术可以使患者方便快捷地实现在线预约挂号,而JSP提供了灵活的页面设计手段。SSM框架则保证了系统的高效开发和稳定维护,MySQL作为后台数据库,确保了数据处理的可靠性。整体而言,这些技术的搭配使得医院挂号系统具备高可用性、优良的用户体验及稳固的数据处理能力,非常适合快节奏的医院环境需要。
资源推荐
资源详情
资源评论
收起资源包目录
医院挂号系统-小程序+jsp+ssm+mysql (2000个子文件)
.classpath 938B
org.eclipse.wst.common.component 564B
org.eclipse.wst.jsdt.ui.superType.container 49B
ext-neptune-debug.css 526KB
ext-neptune.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.min.css 106KB
bootstrap.min.css 103KB
ace-skins.css 99KB
style.min.css 97KB
style.css 76KB
viewer.css 49KB
animate.min.css 46KB
icon.css 45KB
ueditor.css 43KB
form.css 34KB
datepicker.css 33KB
ueditor.min.css 33KB
font-awesome.css 26KB
fullcalendar.css 22KB
video-js.css 21KB
bootstrap-editable.css 21KB
font-awesome.css 19KB
select2.css 19KB
jquery-ui.css 18KB
bootstrap-responsive.min.css 16KB
ui.jqgrid.css 13KB
chosen.css 13KB
video-js.min.css 11KB
dropzone.css 11KB
ace-ie.css 11KB
style.css 9KB
extjs.css 8KB
shCoreDefault.css 7KB
daterangepicker.css 6KB
zTreeStyle.css 6KB
style.css 6KB
position.css 6KB
zTreeStyle.css 6KB
bootstrap-datetimepicker.css 6KB
ztree.css 5KB
fullcalendar.print.css 5KB
basic.css 5KB
ace.onpage-help.css 5KB
video.css 4KB
colorbox.css 4KB
matrix-login.css 4KB
jquery-ui.custom.css 4KB
bootstrap-timepicker.css 3KB
style.css 3KB
zoomimage.css 3KB
form.css 3KB
image.css 3KB
statusbar.css 3KB
colorpicker.css 2KB
GroupTabPanel.css 2KB
camera.css 2KB
prettify.css 2KB
jquery.gritter.css 2KB
custom.css 2KB
emotion.css 2KB
import_fh.css 2KB
dialogbase.css 2KB
uploadify.css 2KB
bootstrap-duallistbox.css 2KB
example.css 2KB
code.css 2KB
edittable.css 1KB
bootstrap-multiselect.css 1KB
websocket.css 956B
plupload.css 797B
Portal.css 604B
ItemSelector.css 556B
webuploader.css 515B
ace-fonts.css 452B
TabScrollerMenu.css 408B
CheckHeader.css 351B
RangeMenu.css 327B
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- qq_453574662024-03-26#内容详尽
java奋斗者
- 粉丝: 1372
- 资源: 191
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功