根据查询语句导出mysql到sql文件
2015-02-27 10:52
267 查看
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sjzs.db.BoneCPUtils; import com.sjzs.web.Constants; public class Export { private static final Logger logger = LoggerFactory.getLogger(Export.class); private static final String BASE_EXPORT_FILE_NAME = Constants.SETTINGS_PROPERTIES .get("base_export_filepath"); private static final int SECTION_COUNT = 500; static { File file = new File(BASE_EXPORT_FILE_NAME); if (!file.exists()) { file.mkdirs(); } } public static void exportInsert(String tableName, String sql, Object... params) { String fullFilename = BASE_EXPORT_FILE_NAME + "export_insert_" + tableName + ".sql"; logger.info("write to:{}", fullFilename); File file = new File(fullFilename); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { logger.error("{}", e); } } OutputStream output = null; try { output = new FileOutputStream(file); IOUtils.write(getInsertSql(tableName, sql, params), output); } catch (IOException e) { logger.error("{}", e); } finally { IOUtils.closeQuietly(output); } } private static String getInsertSql(String tableName, String selectSql, Object... params) { Connection connection = null; PreparedStatement prepareStatement = null; ResultSet rs = null; StringBuilder insertSql = new StringBuilder(); try { connection = BoneCPUtils.getInstance().getZSConnection(); prepareStatement = connection.prepareStatement(selectSql); int i = 1; for (Object param : params) { prepareStatement.setObject(i++, param); } logger.info("selectSql:{}", selectSql); rs = prepareStatement.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); // 取得全部列数 int colCount = rsmd.getColumnCount(); String preSql = getInsertPreSql(tableName, colCount, rsmd); int count = 1; int rowCount = getRowCount(rs); boolean divideExactly = false; while (rs.next()) { if(count == 1){ insertSql.append(preSql); } insertSql.append("("); for (i = 1; i <= colCount; i++) { if (i != 1) { insertSql.append(", "); } if (rsmd.isAutoIncrement(i)) { insertSql.append("null"); } else { insertSql.append("'").append(rs.getObject(i)) .append("'"); } } insertSql.append("),").append("\n"); if(count % SECTION_COUNT == 0){ insertSql.deleteCharAt(insertSql.length() - 1); insertSql.deleteCharAt(insertSql.length() - 1); insertSql.append(";").append("\n"); if(count != rowCount){ insertSql.append(preSql); } else { divideExactly = true; } } ++count; } if(!divideExactly){ insertSql.deleteCharAt(insertSql.length() - 1); insertSql.deleteCharAt(insertSql.length() - 1); insertSql.append(";"); } } catch (Exception e) { logger.error("{}", e); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { logger.error("{}", e); } } if (prepareStatement != null) { try { prepareStatement.close(); } catch (SQLException e) { logger.error("{}", e); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { logger.error("{}", e); } } } return insertSql.toString(); } private static int getRowCount(ResultSet rs) throws SQLException{ int row = rs.getRow(); rs.last(); int rowCount = rs.getRow(); rs.absolute(row); return rowCount; } private static String getInsertPreSql(String tableName, int colCount, ResultSetMetaData rsmd) throws SQLException { StringBuilder preSql = new StringBuilder("INSERT INTO "); preSql.append("`").append(tableName).append("`"); preSql.append("("); for (int i = 1; i <= colCount; i++) { // 取得全部列名 preSql.append("`").append(rsmd.getColumnName(i)).append("`,"); } preSql.deleteCharAt(preSql.length() - 1); preSql.append(")"); preSql.append(" VALUES ").append("\n"); return preSql.toString(); } public static void m 9c21 ain(String[] args) { String tableName = "mobile_main_sum"; String date = "2014-09-17"; String selectSql = "SELECT * FROM " + tableName + " WHERE create_date=?"; exportInsert(tableName, selectSql, date); } }
相关文章推荐
- MySQL中根据if标签实现多条件模糊查询(动态SQL语句)
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- 使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句
- [access查询]将access表导出为TXT文件及将TXT文件导入access表的几个SQL语句
- MySQL关于根据日期查询数据的sql语句
- mysql的sql语句根据经纬度查询距离排序
- mysql导入导出.sql文件备份还原数据库
- 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
- Mysql导入导出.sql文件
- SQL邮件自动应答(根据收到的邮件中的查询语句回复语句执行结果)
- mysql导入sql文件:Mysql导入导出.sql文件
- MySql导出数据解决方案SQL语句
- MYSQL导入导出.sql文件
- MySQL导入导出.sql文件步骤
- SQL邮件自动应答(根据收到的邮件中的查询语句回复语句
- MySQL的一个一条SQL语句查询所有不同种类产品的一部分结果实例的SQL语句
- 在配置文件中获取数据源,然后在hibernate中用sql语句进行查询操作
- MYSQL导入导出.sql文件
- sql语句在sqlserver中根据字段名查询,看哪些表包含了这个字段
- 根据 (进货记录/ 销售记录) 表 查询实时库存量的 SQL语句 for ACCESS