1.连接数据库的代码:

package com.once.xfd.dbutil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class DataBaseUtil {
/**
* 获取数据库连接
* @return Connection 对象
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=master";
String username = "sa";
String password = "123456";
conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public static void closeConn(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

2.备份功能代码:

/**
     * 备份数据库
     * @return backup
     * @throws Exception
     */
public String backup() {
ActionContext context = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest) context
.get(ServletActionContext.HTTP_REQUEST);
String webtruepath = request.getParameter("path");
String name = "dbname"; //数据库名
try {
File file = new File(webtruepath);
String path = file.getPath() + "\\" + name + ".bak";// name文件名
String bakSQL = "backup database 数据库名 to disk=? with init";// SQL语句
PreparedStatement bak = DataBaseUtil.getConnection()
.prepareStatement(bakSQL);
bak.setString(1, path);// path必须是绝对路径
bak.execute(); // 备份数据库
bak.close();
} catch (Exception e) {
e.printStackTrace();
}
return "backup";
}

3.还原数据库代码(调用存储过程)

    /**
     * 数据库还原
     * @return recovery
     */
    public String recovery() {
        ActionContext context = ActionContext.getContext();
        HttpServletRequest request = (HttpServletRequest) context
                .get(ServletActionContext.HTTP_REQUEST);
        String webtruepath = request.getParameter("path");
        String name = "******";
        String dbname = "******";
        try {
            File file = new File(webtruepath);
            String path = file.getPath() + "\\" + name + ".bak";// name文件名
            String recoverySql = "ALTER   DATABASE   数据库名   SET   ONLINE   WITH   ROLLBACK   IMMEDIATE";// 恢复所有连接
            
            PreparedStatement ps = DataBaseUtil.getConnection()
                    .prepareStatement(recoverySql);
            CallableStatement cs = DataBaseUtil.getConnection().prepareCall("{call killrestore(?,?)}");
                cs.setString(1, dbname); // 数据库名
                cs.setString(2, path); // 已备份数据库所在路径
                cs.execute(); // 还原数据库
                ps.execute(); // 恢复数据库连接  
          //执行查询数据库操作
   PreparedStatement pStatement=DataBaseUtil.getConnection().prepareStatement("select * from [t_sjbf]");
  System.out.println(pStatement.execute());
  //将连接异常在后台进行处理,处理完这一次异常之后,就可以建立正常的数据库连接
  dao.find("select * from [t_sjbf]");     
          } catch (Exception e) {
            e.printStackTrace();
        }
        return "recovery";
    }

代码中标为紫色部分的代码并不会影响数据的还原,只是在JFinal中数据还原后连接不会在第一时间内连接上,这样前台在刷新页面的时候便会出现警告,为了防止前端出现这样的警告,把数据库的连接操作在后台进行处理(通过dao.find("select * from [t_sjbf]");这条语句就可以建立起与数据库的连接)。

4.存储过程代码:

create proc killrestore (@dbname varchar(20),@dbpath varchar(40))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status <> -1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
restore database @dbname from disk= @dbpath with replace
end

注意:存储过程创建在系统数据库master下面,切记,否则会报错!!!

在执行数据还原之前应该在master数据库中建立此存储过程,否则会报错。

建立存储过程的步骤如下:

打开SqlServer-->数据库-->系统数据库-->master-->可编程性-->存储过程-->右击存储过程-->在新打开的页面中复制上面的存储过程的代码-->全选这段代码-->执行这段代码-->刷新master数据库,就会出现新建的存储过程了

如下图所示:

Java(JFinal)实现sqlserver2017的数据库的备份与恢复的更多相关文章

  1. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  2. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  3. java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...

  4. jTDS Java连接SQL Server 2000数据库

    Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别 是mssqlserver.jar.msutil.ja ...

  5. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  6. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  7. java通过Access_JDBC30读取access数据库时无法获取最新插入的记录

    1.编写了一个循环程序,每几秒钟读取一次,数据库中最新一行数据 连接access数据库的方法和查询的信息.之后开一个定时去掉用. package javacommon.util; import jav ...

  8. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  9. Java连接并操作SQLServer数据库

    本人只需在项目中引入sqljdbc4.jar 包即可 ----------------------------------------- 在JAVA中如何连接SQL Server数据库 - hangh ...

随机推荐

  1. [SQL]UNPIVOT 多個欄位

    有朋友問「如何直接unpivot成2個欄位」,如下所示, 先準備測試資料如下, view source print? 01 create table T ( 02 no varchar(10), 03 ...

  2. jquery 初始化数据 添加html 第一次玩0.0

    /** * Created by Eee_xiang on 2018/04/12. * 联动响应事件 */ (function () { $.linkEvent = function (options ...

  3. Hibernate 再接触 基础配置 搭建Log4j环境 Junit日志环境等

    <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.aut ...

  4. JAVA 实验报告

        石家庄铁道大学信息科学与技术学院       实验报告 2018年----2019年  第一学期               题目:   四则运算.生成验证码 课程名称:  JAVA语言程序设 ...

  5. mysql查询记录修改时间于现在大于30分钟

    (unix_timestamp(now())-`updatetime`)>1800

  6. Python+Appium自动化环境搭建

    appium工作原理 appium 在android端工作流 client端也就是我们 test script是我们的webdriver测试脚本. 中间是起的Appium的服务,Appium在服务端起 ...

  7. ubuntu下安装nodejs和npm

    第一种安装方法: 安装nodejs : 1 sudo apt-get install nodejs 运行 nodejs -v 会弹出安装node的版本号 这里使用的是 nodejs 并不是常用的nod ...

  8. 04_web基础(一)之tomcat介绍

    01.web引入 在这之前我们已经能够在数据库进行CRUD,在dao处进行CRUD,在service处进行CRUD,对用户来说必须在浏览器上进行CRUD,要完成这个就必须具备web知识. 而web运行 ...

  9. poi excel 加粗

    参考 https://blog.csdn.net/wellto/article/details/52293202 XSSFWorkbook xwb = new XSSFWorkbook(); ... ...

  10. PHP 获取 IE浏览器版本号

    function getIEBrowserVersion(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); if(strpos($agent, ...