自己工作中要用这个功能,就自己写了一个。 自己也测试了,没有发现问题,现在发上来,看看别人有没有人用得着的。
导出测试方法:
public static void main(String[] args) throws SQLException, IOException {
Export export = new ExportMySQL();
export.exportData("c:/sql.sql", "userrole;method;policy;audit", ConnectionManager.getConnection(), true);
}
exportData方法如下:
public void exportData(String fileName, String tables, Connection conn, boolean withDeleteSQL) throws SQLException, IOException;
参数说明:
fileName: 导出到哪个文件;
tables: 要导出哪些数据表,多个数据表名以分号(;)分隔;
conn: 数据库连接;
withDeleteSQL: true,表示要生成delete所有数据的SQL, 如果为false, 则不生成。
导入测试方法:
public static void main(String[] args) throws SQLException, IOException {
Import import_ = new ImportMySQL();
import_.importFile("c:/sql.sql", ConnectionManager.getConnection());
}
importFile方法如下:
public void importFile(String fileName, Connection conn) throws IOException;
参数说明:
fileName: 导入的文件;
conn: 数据库连接;
代码如下:
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
public interface Export {
public void exportData(String fileName, String tables, Connection conn, boolean withDeleteSQL) throws SQLException, IOException;
}
import java.io.IOException;
import java.sql.Connection;
public interface Import {
public void importFile(String fileName, Connection conn) throws IOException;
}
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Formatter;
import java.util.StringTokenizer;
public class ExportMySQL implements Export {
private Connection conn;
private final String SELECT_TABLE = "SELECT * FROM %s;";
private final String DELETE_TABLE = "DELETE FROM %s;\n";
private final String INSERT_TABLE = "INSERT INTO `%s`(%s) VALUES\n%s;\n";
private final String COUNT_TABLE = "SELECT COUNT(*) as totalcount FROM %s;";
public void exportData(String fileName, String tables, Connection conn, boolean withDeleteSQL) throws SQLException, IOException {
checkNull(fileName, "fileName");
checkNull(tables, "tables");
checkString(fileName, "fileName");
checkString(tables, "tables");
checkNull(conn, "conn");
this.conn = conn;
try {
StringBuffer allsql = new StringBuffer();
StringTokenizer s = new StringTokenizer(tables, ";");
while (s.hasMoreTokens()) {
String table = s.nextToken();
Formatter formatter = new Formatter();
formatter.format(COUNT_TABLE, table);
ResultSet rs = conn.createStatement().executeQuery(formatter.toString());
int count = 0;
if (rs.next()) {
count = rs.getInt(1);
}
if (count > 0) {
if (withDeleteSQL) {
formatter = new Formatter();
formatter.format(DELETE_TABLE, table);
allsql.append(formatter.toString());
}
allsql.append(generateInsertSQL(table));
}
}
if (!isEmpty(allsql.toString().trim())) {
FileWriter fw = null;
try {
fw = new FileWriter(fileName);
fw.write(allsql.toString());
} finally {
if (null != fw)
fw.close();
}
}
} finally {
DBUtil.closeConnection(conn);
}
}
private String generateInsertSQL(String table) {
Formatter formatter = new Formatter();
formatter.format(SELECT_TABLE, table);
ResultSet rs = null;
Statement stmt = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(formatter.toString());
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
if (0 == cols) {
return "";
}
String fields = getFields(rsmd);
String allvalue = getValues(rs);
formatter = new Formatter();
formatter.format(INSERT_TABLE, table, fields, allvalue);
String result = formatter.toString();
return result;
} catch (SQLException ex) {
ex.printStackTrace(System.out);
return "";
} finally {
DBUtil.closeResultSet(rs);
DBUtil.closeStatement(stmt);
}
}
private String getValues(ResultSet rs) {
checkNull(rs, "rs");
try {
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
if (0 == cols) {
return "";
}
StringBuffer values = new StringBuffer();
boolean isFirst = true;
while (rs.next()) {
StringBuffer value = new StringBuffer();
for (int i = 1; i <= cols; i++) {
if (null != rs.getString(i))
if (rsmd.getColumnType(i) == Types.VARCHAR || rsmd.getColumnType(i) == Types.DATE || rsmd.getColumnType(i) == Types.TIME
|| rsmd.getColumnType(i) == Types.TIMESTAMP || rsmd.getColumnType(i) == Types.CHAR
|| rsmd.getColumnType(i) == Types.LONGVARCHAR || rsmd.getColumnType(i) == Types.NCHAR
|| rsmd.getColumnType(i) == Types.NVARCHAR || rsmd.getColumnType(i) == Types.LONGNVARCHAR
|| rsmd.getColumnType(i) == Types.SQLXML)
value.append("'" + rs.getString(i) + "'");
else
value.append(rs.getString(i));
else
value.append("NULL");
if (i < cols) {
value.append(",");
}
}
if (isFirst) {
values.append("(" + value + ")");
isFirst = false;
} else
values.append(",\n(" + value + ")");
}
return values.toString();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
return "";
}
}
private String getFields(ResultSetMetaData rsmd) {
try {
int cols = rsmd.getColumnCount();
if (0 == cols) {
return "";
}
StringBuffer fields = new StringBuffer();
for (int i = 1; i <= cols; i++) {
if (i == cols)
fields.append(rsmd.getColumnName(i));
else
fields.append(rsmd.getColumnName(i) + ",");
}
return fields.toString();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
return "";
}
}
public static void main(String[] args) throws SQLException, IOException {
Export export = new ExportMySQL();
export.exportData("c:/sql.sql", "userrole;method;policy;audit", ConnectionManager.getConnection(), true);
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
public class ImportMySQL implements Import {
public void importFile(String fileName, Connection conn) throws IOException {
checkNull(fileName, "fileName");
checkNull(conn, "conn");
StringBuffer buffer = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(fileName));
String next = "";
while (null != next ) {
next = br.readLine();
buffer.append(next);
if (null != next && next.endsWith(";")) {// just means a whole sql
DBUtil.executeSQL(buffer.toString(), null);
buffer = new StringBuffer();
}
}
} finally {
if (null != br)
br.close();
DBUtil.closeConnection(conn);
}
}
public static void main(String[] args) throws SQLException, IOException {
Import import_ = new ImportMySQL();
import_.importFile("c:/sql.sql", ConnectionManager.getConnection());
}
}
代码比较长,也不想加附件了。
有什么问题,大家说一下。谢谢。
其他的代码:
import java.security.InvalidParameterException;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import java.util.UUID;
public class StringUtil {
static ResourceBundle resourceBundle = DaoResourceBundle.getResourceBundle();
public static String changeNull(String n) {
if (null == n) {
return "";
}
return n.trim();
}
public static void checkString(String string, String name) {
if (StringUtil.isEmpty(string)) {
String pattern = resourceBundle.getString("dao.exception.invalidparameterexception");
String message = MessageFormat.format(pattern, new String(name));
throw new InvalidParameterException(message);
}
}
public static void checkNull(Object object, String name) {
if (null == object) {
String pattern = resourceBundle.getString("dao.exception.nullpointerexception");//需要一个properties文件,也可以直接hardcode
String message = MessageFormat.format(pattern, new String(name));
throw new NullPointerException(message);
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public final class DBUtil {
static Log logger = LogFactory.getLog(DBUtil.class);
public static void executeSQL(String sql, final List<Object> paramsList) {
Connection conn = ConnectionManager.getConnection();
PreparedStatement stmt = null;
try {
stmt = conn.prepareStatement(sql);
//setParameters(paramsList, stmt);//在这个功能里应该用不到,所以就尽量少的提供代码。
stmt.executeUpdate();
} catch (SQLException ex) {
logger.error("ERROR_CAUSE" + ex.getCause() + " MSG: " + ex.getMessage());
//throw new DBException(ex);
} finally {
closeStatement(stmt);
}
}
public static void closeStatement(final Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException ex) {
logger.error("ERROR_CAUSE" + ex.getCause() + " MSG: " + ex.getMessage());
//throw new DBException(ex);
}
}
}
public static void closeResultSet(final ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
logger.error("ERROR_CAUSE" + ex.getCause() + " MSG: " + ex.getMessage());
//throw new DBException(ex);
}
}
}
public static void closeConnection(final Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.error("ERROR_CAUSE" + ex.getCause() + " MSG: " + ex.getMessage());
//throw new DBException(ex);
}
}
}
}
其中DBUtil里用到CoonectionManager, 大家都知道通常会用到一些配置文件,还有一些第三方连接池,提供出来有点乱。这个写起来应该不是什么难事,就自己写吧。
分享到:
相关推荐
Linux 下 MySQL 数据库导入导出命令大汇总 Linux 作为一个广泛应用于服务器操作系统的平台,MySQL 作为一个流行的关系数据库管理系统,在 Linux 下的使用非常广泛。因此,掌握 Linux 下 MySQL 数据库的导入导出命令...
MySQL 数据库导入导出命令是数据库管理员和开发者经常使用的命令,用于将 MySQL 数据库导出到文件中,以便备份、还原或迁移到其他服务器。下面将详细介绍 MySQL 数据库导入导出的命令和方法。 数据库备份 数据库...
1. `mysqldump`:这是一个用于备份数据库的实用程序,它能够将MySQL数据库结构和数据导出为SQL文件。这个文件可以被用来在另一台服务器上重新创建相同的数据库,或者在本地恢复数据。 2. `mysql`:这是MySQL的...
### 如何导入导出MySQL数据库 #### 1. 概述 MySQL数据库是目前非常流行的开源关系型数据库管理系统,广泛应用于各种规模的应用程序中。在实际应用过程中,常常需要进行数据库的备份与恢复操作,例如迁移数据库、...
首先,我们来看**SQL脚本形式**的导入导出方法,这是推荐的方式,因为它能确保在不同环境下保持兼容性。 **导出SQL脚本**: 1. 使用`phpMyAdmin`工具:在工具的导出选项中,确保选择“结构”和“数据”,避免勾选...
标题中的“mariadb导入导出mysql数据库的脚本”是指使用特定的脚本来实现MySQL或MariaDB数据库的导入和导出操作。这种脚本的优点在于可以自动化处理数据库的创建、表结构导入以及数据记录的插入,从而节省手动操作的...
mysqldump 命令和 source 命令是MySQL数据库导入导出 SQL 文件的两个重要工具。mysqldump 命令可以将数据库的数据和表结构导出到一个 SQL 文件中,而 source 命令可以将 SQL 文件导入到数据库中。
在使用 PowerDesigner 导出 SQL 文件时,如果包含列注释,可能会在导入到 MySQL 数据库中时丢失。这是因为 PowerDesigner 导出的 SQL 文件的编码格式可能不是 UTF-8,而 MySQL 数据库的编码格式是 UTF-8,导致中文...
### MySQL在CMD状态下的导入与导出操作详解 ...以上步骤详细介绍了如何在CMD环境下进行MySQL的导入导出操作,并解决了导入文件大小限制的问题。这些操作对于数据库管理来说是非常实用且重要的技能。
综上所述,MySQL数据库的导入导出操作,涉及到mysqldump工具和source命令的熟练使用,以及SQL语法中ALTER TABLE命令用于调整表结构。在操作过程中,还需要注意字符集的匹配问题,以及在多表查询时为派生表添加别名以...
总结,将SQL数据库的数据导入到MySQL数据库,涉及到多个环节,包括数据的导出、转换和导入,以及在此过程中需要注意的数据一致性、权限管理、备份恢复和性能优化。通过使用如`mss2sql`这样的专业工具,可以简化这个...
2. 在导出到文件处填入您想要存入备份文件的路径和文件名。 3. 点击“导出”按钮,等待备份完成。 五、导入数据库 导入数据库是将备份的数据库文件恢复到原来的状态。在SQLyog中,可以使用“执行脚本”功能来导入...
本文将详细介绍如何在不同操作系统环境下进行MySQL数据库的导入导出操作,特别是针对SQL文件的操作。 #### 二、MySQL导入导出的基本概念 1. **导出**: 将数据库中的数据以SQL脚本的形式导出到文件中,方便备份或...
### MySQL 数据库的导入与导出操作详解 #### 一、MySQL命令行模式的设置 ...以上步骤覆盖了MySQL数据库的基本导入导出操作以及处理大文件的一些常见问题。通过这些方法,可以有效地管理和维护MySQL数据库。
与导出类似,MySQL 提供了 `mysql` 工具用于将 SQL 脚本文件导入到数据库中,从而实现数据的恢复。在 Java 程序中,同样可以通过调用系统命令的方式来执行 `mysql` 命令。 #### Java 实现 在 `DBBackupHelper` 类中...
导入SQL文件允许用户将包含创建表、插入数据等指令的文本文件应用到MySQL数据库中,而导出则相反,它将数据库中的内容转换为SQL脚本,以便存储或转移到其他系统。 这个名为"mysql导入导出sql"的工具提供了以下功能...
全国地区数据库 mysql导出的sql文件 可导入mssql
本文讲述了在linux命令下导出导入.sql文件的方法。分享给大家供大家参考,具体如下: 一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1、导出数据和表结构: mysqldump -u用户名 -p密码 ...