刚开始的时候,在做项目的时候,我想用hibernate对数据库的备份,我不知道如何去使用,在网上也没有找到相关的资料,就想到用mysql原生 的语句去进行操作,利用java里面的Runtime执行应用程序,得到里面的输出流,从而写入一个文件中
代码如下:
只需要导入相应的包就可以,可以调用里面的方法![这里写图片描述]
public class MysqlUtils {
/**
* 数据库默认用户名
*/
private static String username = "root";
/**
* 数据库默认密码
*/
private static String password = "root";
/**
* 数据库默认主机地址
*/
private static String host = "127.0.0.1";
private static String database = "";
public static void main(String[] args) throws IOException {
}
/**
* 对数据库进行还原操作
*
* @param path
* 要还原的文件名,全路径
* @param database
* 所要还原的数据库
* @throws IOException
*/
public static void recover(String path, String database) throws IOException {
recover(path, MysqlUtils.username, MysqlUtils.password,
MysqlUtils.host, database);
}
/**
* 对数据库进行还原操作
*
* @param path
* 要还原的文件名,全路径
* @param username
* mysql的用户名
* @param password
* mysql的密码
* @param database
* 要还原的数据库
* @throws IOException
*/
public static void recover(String path, String username, String password,
String database) throws IOException {
recover(path, username, password, MysqlUtils.host, database);
}
/**
* 对数据库进行还原操作
*
* @param path
* 要还原的文件名,全路径
* @param username
* mysql的用户名
* @param password
* mysql的密码
* @param host
* 所要连接的主机
* @param database
* 所要还原的数据库
* @throws IOException
*/
public static void recover(String path, String username, String password,
String host, String database) throws IOException {
Runtime runtime = Runtime.getRuntime();
if (username != null) {
MysqlUtils.username = username;
}
if (password != null) {
MysqlUtils.password = password;
}
if (host != null) {
MysqlUtils.host = host;
}
if (database != null) {
MysqlUtils.database = database;
}
String recoversql = "mysql -u" + MysqlUtils.username + " -p"
+ MysqlUtils.password + " -h" + MysqlUtils.host
+ " --default-character-set=utf8 " + MysqlUtils.database;
System.out.println(recoversql);
// "mysql -uroot -proot --default-character-set=utf8 jingsai"
Process process = runtime.exec(recoversql);
OutputStream outputStream = process.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(path)));
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = br.readLine()) != null) {
sb.append(str + "\r\n");
}
str = sb.toString();
System.out.println(str);
OutputStreamWriter writer = new OutputStreamWriter(outputStream,
"utf-8");
writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
}
/**
* 对mysql数据库进行备份 默认的用户名和密码 root 主机是本机地址
*
* @param path
* 备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
* @param database
* 所要备份的数据库的名字
* @throws IOException
*/
public static void backup(String path, String database) throws IOException {
backup(path, null, null, database, null);
}
/**
* 对mysql数据库进行备份 默认 主机是本机地址
*
* @param path
* 备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
* @param username
* Mysql的用户名
* @param password
* mysql的密码
* @param database
* 所要备份的数据库的名字
* @throws IOException
*/
public static void backup(String path, String username, String password,
String database) throws IOException {
backup(path, username, password, null, database);
}
/**
* 对mysql数据库进行备份
*
* @param path
* 备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
* @param username
* Mysql的用户名
* @param password
* mysql的密码
* @param database
* 所要备份的数据库的名字
* @param host
* 所要连接的主机地址
* @throws IOException
*/
public static void backup(String path, String username, String password,
String database, String host) throws IOException {
if (username != null) {
MysqlUtils.username = username;
}
if (password != null) {
MysqlUtils.password = password;
}
if (host != null) {
MysqlUtils.host = host;
}
if (database != null) {
MysqlUtils.database = database;
}
// -u后面是用户名,-p是密码-p后面最好不要有空格,-jingsai是数据库的名字 -h 是要连接的主机的地址
String backupsql = "mysqldump -u" + MysqlUtils.username + " -p"
+ MysqlUtils.password + " -h" + MysqlUtils.host + " "
+ MysqlUtils.database;
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(backupsql);
InputStream inputStream = process.getInputStream();// 得到输入流,写成.sql文件
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader br = new BufferedReader(reader);
String s = null;
StringBuffer sb = new StringBuffer();
while ((s = br.readLine()) != null) {
sb.append(s + "\r\n");
}
s = sb.toString();
File file = new File(path);
file.getParentFile().mkdirs();
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(s.getBytes());
fileOutputStream.close();
br.close();
reader.close();
inputStream.close();
}
}
这个是我个人的经历与总结。不喜勿喷