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

JAVA 执行MYSQL脚本(创建数据库,建表等)

阅读更多
createDB.sql
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`@@@dbName@@@` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `@@@dbName@@@`;


DROP TABLE IF EXISTS `tb_abc`;

CREATE TABLE `tb_abc` (
  `id` varchar(36) NOT NULL,
  `days` int(11) DEFAULT NULL,
  `last_update_user` varchar(50) DEFAULT NULL,
  `last_update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



MySqlSuperDao.java
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.ArrayList;
import java.util.List;
import java.util.Properties;

public class MySqlSuperDao implements ISuperDao {
	/**
	 * 创建数据库(读SQL脚本)
	 * 
	 * @author HeCheng
	 */
	@SuppressWarnings("finally")
	public boolean createMisDB(String name, String year) throws DbException,
			DaoException, SQLException {
		Connection conn = null;
		Statement stmt = null;
		boolean success = false;
		// 创建数据库名
		String dbName = name + "_" + year;
		try {
			List<String> sqlList = new ArrayList<String>();
			try {
				InputStream sqlFileIn = MySqlSuperDao.class
						.getResourceAsStream("/MySql/createDB.sql");
				// 将SQL脚本产生为list<String>

				StringBuffer sqlSb = new StringBuffer();
				byte[] buff = new byte[1024];
				int byteRead = 0;
				while ((byteRead = sqlFileIn.read(buff)) != -1) {
					sqlSb.append(new String(buff, 0, byteRead, "utf-8"));
				}

				String[] sqlArr = sqlSb.toString().split(
						"(;\\s*\\r\\n)|(;\\s*\\n)");

				// 替换数据库名
				int replace = 0;
				for (int i = 0; i < sqlArr.length; i++) {
					if (replace == 2) {
						break;
					}
					if (sqlArr[i].indexOf("@@@dbName@@@") > -1) {
						sqlArr[i] = sqlArr[i].replace("@@@dbName@@@", dbName);
						replace++;
					}
				}
				// 将数组转成LIST并且过滤LOCKTABLE 和注释
				for (int i = 0; i < sqlArr.length; i++) {
					String sql = sqlArr[i].replaceAll("--.*", "").trim();
					if (!sql.equals("") && sql.indexOf("LOCK TABLES") != 0
							&& sql.indexOf("UNLOCK TABLES") != 0
							&& sql.indexOf("/*") != 0) {
						sqlList.add(sql);
					}
				}
			} catch (Exception e) {
				System.out.println("error");
				return false;
			}
			// 创建数据库链接并执行SQL脚本
			conn = this.getConnection();
			stmt = null;
			conn.setAutoCommit(false);
			stmt = conn.createStatement();
			for (String sql : sqlList) {
				stmt.addBatch(sql);
			}
			stmt.executeBatch();
			success = true;
		} catch (Exception e) {
			// 如果报错,则删除D
			conn = null;
			conn = this.getConnection();
			stmt = null;
			conn.setAutoCommit(false);
			stmt = conn.createStatement();
			stmt.execute("drop database " + dbName);
			success = false;
		} finally {
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
			return success;
		}
	}

	/**
	 * 获取数据库链接
	 * 
	 * @author HeCheng
	 * @time 2011-02-26 10:48:24
	 * @return
	 * @throws SQLException
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	private Connection getConnection() throws SQLException, IOException,
			ClassNotFoundException {
		Connection con = null;
		Class.forName("com.mysql.jdbc.Driver");

		Properties properties = new Properties();
		properties.load(MySqlSuperDao.class
				.getResourceAsStream("/MySql/DB.properties"));
		String url = properties.getProperty("url");
		String u = properties.getProperty("u");
		String p = properties.getProperty("p");
		con = DriverManager.getConnection("jdbc:mysql://" + url + "", u, p);
		return con;
	}
}
分享到:
评论

相关推荐

    quartz集群各种数据库建表脚本

    "quartz集群各种数据库建表脚本" 提供了在不同类型的数据库中创建Quartz集群所需的表结构。基于quartz2.2.1版本,这个脚本应该包含了创建必要的调度表,如QRTZ_JOB_DETAILS、QRTZ_TRIGGERS、QRTZ_SIMPLE_TRIGGERS等...

    java实体转mysql建表语句

    2. **数据库建表语句(Table Creation Statement)**: MySQL的建表语句是SQL语言的一部分,用于创建新的数据库表。基本语法包括指定表名、定义列名、数据类型、约束条件等。 3. **自动转换工具**: 为了从Java...

    quartz-数据库建表语句.zip

    在部署Quartz时,根据选用的数据库(如MySQL、Oracle、SQL Server等),需要将"quartz-数据库建表语句.zip"中的相应SQL脚本运行在数据库上,以创建这些必要的表。这一步是Quartz配置中的关键部分,确保Quartz能够...

    quartz各种数据库的建表语句

    例如,如果你使用的是MySQL,你需要找到MySQL的建表脚本,然后在MySQL客户端执行。这将创建必要的表,如`QRTZ_TRIGGERS`, `QRTZ_JOB_DETAILS`, `QRTZ_CALENDARS`等,这些表用于存储触发器、作业详细信息和日历信息。...

    火车订票系统课程设计脚本SQLserver数据库建表语句源代码Javaweb界面+存储过程等功能源代码.zip

    首先,"SQLserver数据库建表语句源代码"这部分是关于数据库设计的。在SQL Server中,建表语句用于创建数据库中的表格结构,定义字段、数据类型、主键、外键等关系。这通常涉及到需求分析,理解火车订票系统的业务...

    mybatis入门实例(mysql数据库,带建表语句)

    在该实例中,"带建表语句"意味着包含了一组SQL脚本来创建数据库表。在MyBatis中,通常会在Mapper XML文件中定义这些SQL语句,或者在初始化阶段通过编程方式执行。例如: ```sql CREATE TABLE `user` ( `id` INT(11...

    MySQL表自动生成Java实体类

    这里提到的工具或脚本可以自动从MySQL数据库中读取表结构,然后根据结构生成对应的Java源代码。这个过程涉及到以下步骤: 1. **数据库连接**: 首先,需要配置数据库连接字符串,包括数据库URL、用户名、密码等信息...

    Quartz 2.2.2数据库表格脚本

    4. **tables_mysql_innodb.sql**:MySQL数据库的脚本,考虑到InnoDB存储引擎的安全性和事务支持,它是MySQL的推荐选择。 5. **tables_cubrid.sql**:用于CUBRID数据库,一个高性能、开源的关系型数据库管理系统。 ...

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具 使用 1、安装 下载发行版,打开idea:settings-&gt;plugins-&gt;intall plugin from disk 2、使用 打开实体类,右键选择ToMysql/ToOracle/To...

    java代码操作数据转移,把一个数据库里的东西移动到另一个数据库,自动建库建表

    总之,使用Java和MySQL JDBC驱动进行数据库迁移是一个复杂但可实现的过程,涉及到数据库连接、元数据查询、SQL脚本执行等多个步骤。通过合理的编程和错误处理,可以构建一个可靠的自动化迁移工具。

    mysql数据抽取,自动生成hive建表语句

    1. **连接MySQL**:使用Java或Python等编程语言,通过JDBC或其他库连接到MySQL数据库,获取表信息。 2. **解析表结构**:查询MySQL的元数据信息,如字段名、字段类型、字段长度、是否为主键等。 3. **映射数据类型...

    sybase库中导出全部表的oracle、mysql和sybase的建表语句

    在Java环境中,可以利用JDBC(Java Database Connectivity)API编写程序,连接到Sybase数据库,执行相应的SQL查询,并将结果解析成建表语句。 `java`在这里扮演了工具开发的角色,开发者可以利用Java的强类型和丰富...

    mysql语句转postgres的工具

    综上所述,`MysqlToPostgresUtil`是一个实用的工具,它简化了MySQL到PostgreSQL的迁移过程,通过自动转换DDL和创建触发器,确保了迁移后的数据库能够在PostgreSQL环境中正常工作。在使用该工具时,应充分了解其功能...

    java使用influxDB数据库的详细代码

    在本文中,我们将详细介绍 Java 使用 InfluxDB 数据库的详细代码,包括如何在 Maven 项目中引入 InfluxDB 依赖项,编写 InfluxDB 工具类,连接 InfluxDB 数据库,创建保留策略等。 pom.xml 中引入 InfluxDB 依赖项 ...

    基于java访问mysql数据库一

    您只需要在实体类上标记相关注解就能达到创建数据库的操作,指定初始化脚本就能执行数据初始化,内置测试demo。 数据库支持 mysql、达梦 功能介绍 兼容MP 排除字段逻辑(static、transient修饰字段和@TableField...

    JSP租车管理系统+数据库

    JSP(JavaServer Pages)是Java平台上的一个服务器端脚本语言,用于创建动态网页。在JSP中,HTML代码和Java代码可以混合编写,使得开发者可以在网页中嵌入Java代码来处理动态内容。JSP通过编译成Servlet运行在服务器...

    SpringBoot + MybatisPlus 实现实体类转成数据库表结构,可直接运行

    为了在启动时自动创建表,我们可以创建一个启动命令类,注入MybatisPlus的SqlRunner并执行建表操作: ```java @Component @CommandLineRunner public class CreateTableOnStartup implements CommandLineRunner { @...

    springboot+mybatisplus自动建表案例

    在本案例中,我们将深入探讨如何使用Spring Boot与MyBatis Plus结合实现数据库表的自动化创建。Spring Boot简化了Spring应用程序的开发过程,而MyBatis Plus则为MyBatis提供了一个强大的扩展,使得数据库操作更为...

    好例子网_JAVA简易版问答网站(含mysql数据库脚本)_JAVA简易版问答网站_easy_

    3. **数据库设计**:通过阅读SQL脚本,可以学习到数据库建表、关系设计以及如何为问答系统设计合适的数据结构。 4. **Maven项目管理**:学习如何使用POM.xml文件管理项目依赖,以及Maven的构建生命周期和插件。 5. *...

    Java项目-基于 Java+MySql+Swing学生选课系统.zip

    在【说明.txt】中,可能详细介绍了项目的开发环境配置、数据库建表脚本、程序运行步骤等,帮助用户理解并运行项目。而【Java swing mysql实现的学生选课系统项目源码】则包含了实际的代码文件,通过阅读源码,可以...

Global site tag (gtag.js) - Google Analytics