`
907182878
  • 浏览: 7717 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql通过jdbc的Statement做导出数据库的sql

    博客分类:
  • jdbc
阅读更多
package net.eicp.roomally.util.tool;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;

import net.eicp.roomally.util.JdbcManager;

/**
 * @author xxf
 */
public class MySqlUtils {
	public static final String enter = "\r\n";//windows txt文档的换行

	public static void main(String[] args) throws SQLException,
			FileNotFoundException, UnsupportedEncodingException, IOException {
		MySqlUtils mySqlUtils = new MySqlUtils();
		System.out.println(mySqlUtils.exportSqlString(new String[] {
				"ally_user", "keywords", "clauses" }));//要导出的表名,可多个
	}

	public void export(String[] args) throws SQLException,
			FileNotFoundException, UnsupportedEncodingException, IOException {
		String exportPath = MySqlUtils.class.getResource("/").getPath()//得到classpath路径
				+ getDateString("yyyy-MM-dd_hh-mm-ss") + ".sql";
		PATH = exportPath;
		String sql = exportSqlString(args);

		// FileWriter out = new FileWriter(exportPath);
		// 如果要写入全角字符,应该选择合适的编码再定义out
		FileOutputStream fos = new FileOutputStream(exportPath);
		OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
		BufferedWriter out = new BufferedWriter(osw);
		out.write(sql);//进行文件保存
		// out.write(new String(sql.getBytes(),"utf-8"));
		out.flush();
		out.close();
		this.sql = sql;
	}

	private String sql;

	public String getSql() {
		return sql;
	}

	public static String PATH;

	public static String getDateString(String format) {
		String dateStr = new SimpleDateFormat(format).format(new Date());
		return dateStr;
	}

	public String exportSqlString(String[] tableNames) throws SQLException {
		StringBuffer tablesql = new StringBuffer();
		for (int i = 0; i < tableNames.length; i++) {
			tablesql.append(exportSqlString(tableNames[i]) + enter + enter);
		}
		return tablesql.toString();
	}

	public String exportSqlString(String tableName) throws SQLException {
		String tablesql = "";
		String datasql = "";
		Connection con = null;
		Statement stat = null;
		try {
			con = JdbcManager.getConnection();//得到数据库连接
			stat = con.createStatement();//创建Statement对象
			ResultSet rs = stat.executeQuery("select * from " + tableName);//执行查询语句
			tablesql = getCreateTableSql(rs, tableName);//得到创建表的sql语句
			datasql = getTableDataSql(rs, tableName);//得到插入数据的sql语句
		} catch (SQLException e) {
			throw e;
		} finally {
			JdbcManager.free(stat, con);
		}
		return tablesql + enter + datasql;
	}

	public String[] getColumns(ResultSet rs) throws SQLException {//得到字段的名字,存放到一个数组里
		ResultSetMetaData rsmd = rs.getMetaData();
		int ccount = rsmd.getColumnCount();
		String[] args = new String[ccount];
		for (int i = 1; i <= ccount; i++) {
			String colName = rsmd.getColumnName(i);
			args[i - 1] = colName;
		}
		return args;
	}

	public String getColumnsString(String[] args) {//拼接所有字段名
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < args.length; i++) {
			buffer.append("`" + args[i] + "`,");
		}
		return buffer.deleteCharAt(buffer.length() - 1).toString();
	}

	public String getCreateTableSql(ResultSet rs, String tableName)
			throws SQLException {
		ResultSetMetaData rsmd = rs.getMetaData();//主要的通过这个方法
		int ccount = rsmd.getColumnCount();
		StringBuffer columnBuffer = new StringBuffer("DROP TABLE IF EXISTS `"
				+ tableName + "`;" + enter);//为了方便,好多东西是写死的
		columnBuffer.append("CREATE TABLE `" + tableName + "` (" + enter);
		for (int i = 1; i <= ccount; i++) {
			int size = rsmd.getColumnDisplaySize(i);
			String colTypeName = rsmd.getColumnTypeName(i);
			// String colClassName = rsmd.getColumnClassName(i);
			String colName = rsmd.getColumnName(i);
			columnBuffer.append("`" + colName + "` ");
			columnBuffer.append(colTypeName);//在这儿我只做了一些简单的判断
			if (!"double".equalsIgnoreCase(colTypeName)
					&& !"date".equalsIgnoreCase(colTypeName)) {
				columnBuffer.append("(" + size + ") ");
			}
			columnBuffer.append(" DEFAULT NULL," + enter);
		}
		columnBuffer.delete(columnBuffer.length() - 3,
				columnBuffer.length() - 2);
		columnBuffer.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");
		return columnBuffer.toString();
	}

	public String getTableDataSql(ResultSet rs, String tableName)
			throws SQLException {
		String[] columns = getColumns(rs);
		StringBuffer columnBuffer = new StringBuffer();
		columnBuffer.append("INSERT INTO `" + tableName + "` ("
				+ getColumnsString(columns) + ") VALUES");
		while (rs.next()) {
			columnBuffer.append("(");
			for (int i = 0; i < columns.length; i++) {
				Object obj = rs.getObject(columns[i]);
				String typeName = "";
				if (obj == null) {
					obj = "";
				}
				if (obj.getClass() != null) {
					typeName = obj.getClass().getName();
				}//在这儿我只做了一些简单的判断
				if ("java.lang.String".equals(typeName)
						|| "java.sql.Date".equals(typeName)) {
					columnBuffer.append("'" + obj + "',");
				} else {
					columnBuffer.append(obj + ",");
				}
			}
			columnBuffer.deleteCharAt(columnBuffer.length() - 1);
			columnBuffer.append("),");
		}
		if (columnBuffer.toString().endsWith("VALUES"))
			return "";
		columnBuffer.deleteCharAt(columnBuffer.length() - 1).append(";");
		return columnBuffer.toString();
	}
}
 
package net.eicp.roomally.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import net.eicp.roomally.exception.RoomAllyJdbcException;
import net.eicp.roomally.util.tool.CryptUtil;

public class JdbcManager {

	private JdbcManager() {
	}

	private static String url = null;
	private static String driver = null;
	private static String username = null;
	private static String password = null;
	static {
		try {
			InputStream is = JdbcManager.class.getClassLoader()
					.getResourceAsStream("jdbc.properties");
			Properties properties = new Properties();
			properties.load(is);
			url = properties.getProperty("jdbc.url");
			driver = properties.getProperty("jdbc.driver");
			username = properties.getProperty("jdbc.username");
			password = properties.getProperty("jdbc.password");
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
		
		} catch (IOException e) {
		
		}
	}

	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
		
		}
	}

	public static void free(Statement st, Connection conn) {
		try {
			if (st != null)
				st.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			
		}
	}
}
 
在classpath下有jdbc.properties内容如下:
jdbc.url=jdbc:mysql://localhost:3310/roomally?useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=roomally
jdbc.password=039a44b295a8cfb62506b7fe2c23801a
分享到:
评论

相关推荐

    java调用mysql命令 导入导出数据库

    在这个过程中,Java通过JDBC(Java Database Connectivity)接口与MySQL进行交互,利用MySQL提供的命令行工具如`mysqldump`和`mysql`来实现数据的导入导出。 首先,我们需要了解JDBC。JDBC是Java平台上的一个标准...

    JDBC实现纵向导出数据库数据

    本篇文章将详细讲解如何利用JDBC实现纵向导出数据库数据,这一过程通常用于数据备份、数据分析或者数据迁移等场景。 首先,理解“纵向导出”意味着我们将按照数据库表的每一行进行导出,即每行数据作为一个独立的...

    java实现mysql数据库的表导出到excel文件

    通过这种方式,我们可以实现数据库数据到Excel的自动化导出,极大地提高了数据处理的效率。这个简单的Java程序演示了如何结合JDBC和Apache POI进行数据库与文件系统的交互,对于开发人员来说是一项实用的技能。

    java操作数据库 导出excel

    通过JDBC,你可以执行SQL查询,插入、更新或删除数据,甚至处理事务。在Java程序中,你需要加载对应的数据库驱动,建立数据库连接,创建Statement或PreparedStatement对象来执行SQL语句,然后获取并处理结果集。 ...

    sql语句插入MySQL数据库操作指南

    首先,需要加载MySQL的JDBC驱动,然后创建数据库连接,接着创建Statement或PreparedStatement对象,最后执行SQL并处理结果。 当开发者需要将自己的数据库与他人同步时,可以使用MySQL的`mysqldump`工具导出数据库...

    从mysql数据库中批量下载Blob图片到本地

    2. **创建Statement**:通过`Connection.createStatement()`创建一个Statement对象,用于执行SQL查询。 3. **执行查询**:编写SQL语句,比如`SELECT image_column FROM table_name`,其中`image_column`是存储图片的...

    数据库与excel导入导出(JDBC,myeclipse)

    在将数据库中的数据导出到Excel时,我们需要先通过JDBC查询出数据,然后利用Java的Apache POI库或其他类似的库,如JExcelApi,来创建并填充Excel工作表。Apache POI提供了一个强大的API,可以读写Microsoft Office...

    Mysql_JDBC.rar

    通过学习上述内容,开发者可以熟练地使用MySQL进行数据库设计和管理,通过JDBC实现Java程序与MySQL数据库的交互,同时利用Navicat提升数据库管理效率。在实际项目中,这些技能是不可或缺的,有助于构建稳定、高效的...

    导出数据库数据到Excel

    在IT行业中,数据库管理和...总的来说,导出数据库数据到Excel是一项常见的任务,通过结合Java编程、JDBC和Apache POI库,我们可以实现高效且灵活的数据处理。理解并掌握这些技术对于提升数据处理能力具有重要意义。

    JDBC创建触发器 JDBC存储过程 JDBC创建表 数据备份 java备份数据库/JAVA恢复数据、java导入sql脚本

    在Java中,我们可以通过JDBC读取整个数据库或特定表的数据,将其导出为SQL脚本或CSV文件,实现数据备份。例如,可以逐行读取数据,然后使用`BufferedWriter`写入文件。同时,这些备份文件可以用于恢复操作。 **JAVA...

    txt导入到mysql数据库,利用poi导出到excel

    5. **执行SQL**:通过Statement或PreparedStatement对象执行SQL语句,将数据插入到数据库中。 6. **关闭连接**:完成导入后,记得关闭数据库连接以释放资源。 接下来,我们关注如何利用Apache POI库将数据导出到...

    JAVA实现跨数据库服务器数据导出导入功能

    当涉及到不同数据库系统间的数据交互,如从SQL Server到MySQL,JAVA作为一种强大的后端编程语言,提供了丰富的库和工具来实现跨数据库服务器的数据导出和导入功能。本文将深入探讨如何使用JAVA来实现这一目标。 ...

    用JAVA将数据库导入csv程序

    开发者需要编写SQL查询来提取所需的数据,然后通过JDBC的ResultSet对象来遍历并处理这些结果。 程序的流程可能如下: 1. **连接数据库**:使用JDBC的`DriverManager.getConnection()`方法,提供数据库URL、用户名...

    jsp+servlet+jdbc+mysql通讯录管理系统

    在本系统中,JDBC用于连接到MySQL数据库,执行SQL查询、插入、更新和删除操作。开发者通过编写SQL语句,利用PreparedStatement或Statement对象执行这些操作,确保数据的安全性和一致性。 4. **MySQL** MySQL是一种...

    多线程以JDBC的方式返回海量数据

    这可以通过在SQL语句中添加LIMIT和OFFSET子句实现,或者根据数据库的特定功能,如Oracle的ROWNUM或MySQL的LIMIT。 3. **分配任务**:为线程池中的每个线程分配一个查询任务,每个任务负责处理一个数据块。 4. **并行...

    从MySQL导出数据到excel

    总结来说,从MySQL导出数据到Excel需要理解JDBC连接数据库的基本原理,掌握Apache POI库的使用,并能编写Java代码将数据库查询结果转化为Excel文件。通过这样的程序,你可以方便地管理和分享大量结构化数据,提高...

    查询mysql数据库中的二进制图片数据,并全部显示出来

    在本示例中,我们将探讨如何查询包含二进制图片数据的MySQL数据库,并通过JSP(JavaServer Pages)展示这些图片。这是一个基本但实用的Web应用开发场景。 首先,我们需要一个MySQL数据库表来存储图片数据。表结构...

Global site tag (gtag.js) - Google Analytics