2024-11-29 15:20:19
一、客户的数据库数据被篡改,利用Log Explorer工具根据日志生成的回滚脚本有200多M,不可能一下子扔到查询分析器里去执行,于是想是否SQL Server是否可以像Oracle那样直接执行.sql文件。讲过查资料,测试,发现可以在cmd窗口中执行如下命令执行Sql文件:
二、osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql;
三、简单说明:osql为SQL Server的命令,要在cmd中执行该命令,一般安装完SQL Server后该命令对应的路径会自动添加到系统环境变量中。 -S 表示要连接的数据库服务器 -U表示登录的用户ID,-P表示登录密码 -i表示要执行的脚本文件路径。
四、Apache ant提供了直接执行sql脚本文件的功能:
五、Java代码:
public class AntExecSql
{public static void execSqlFile(String url, String userID, String pwd, String sqlFile)
{
SQLExec2 sqlExec = new SQLExec2();
// 设置数据库参数
sqlExec.setDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver");
sqlExec.setUrl(url);
sqlExec.setUserid(userID);
sqlExec.setPassword(pwd);
File file = new File(sqlFile);
sqlExec.setSrc(file);
sqlExec.setPrint(true); // 设置是否输出
// 输出到文件 sql.out 中;不设置该属性,默认输出到控制台
// sqlExec.setOutput(new File("d:/script/sql.out"));
sqlExec.setProject(new Project()); // 要指定这个属性,不然会出错
sqlExec.execute();
}
public static void main(String[] args) {
String file1 = "C:/1.sql";
String url = "jdbc:sqlserver://localhost:1433;database=master";
String username = "sa";
String pwd = "sa@jiaj";
try {
AntExecSql.execSqlFile(url, username, pwd, file1);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}