Package org.qdao.implement.mysql

Source Code of org.qdao.implement.mysql.MySqlDBEngine

package org.qdao.implement.mysql;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import org.qdao.DBConfig;
import org.qdao.DBEngineFactory;
import org.qdao.core.DBType;

import com.tan.util.InitTables;
import com.tan.util.TanUtil;

/**
*
* @author 譚元吉
* @since 2010-2-27 上午01:43:29
*/
public class MySqlDBEngine extends org.qdao.AbstractDBEngine {

  static {
    DBEngineFactory.register(new MySqlDBEngine());
  }
  protected MySqlDBEngine() {
  }

  public boolean support(DBConfig config) {
    for (String path : config.jarPath) {
      String t = path.toLowerCase();
      if (!t.endsWith(".jar") && !t.endsWith(".class")) {
        return false;
      }
    }
    if (isEmpty(config.driver)
        || isEmpty(config.username)
        || isEmpty(config.password)
        || isEmpty(config.url)) {
      return false;
    }
    int type = DBType.getType(config.driver);
    if (type != DBType.DB_TYPE_MYSQL) {
      return false;
    }
    if (!DBType.supportUrl(type, config.url)) {
      return false;
    }
   
    this.config = config;
    return true;
  }

  private boolean isEmpty(String value) {
    if (value == null || value.trim().length() == 0) {
      return true;
    }
    return false;
  }

  @Override
  public void dispose() {
    super.dispose();
  }

    @Override
    public Connection getConnection() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException
    {
        Connection conn = null;
        try{
            conn = super.getConnection();
        } catch (Throwable e) {
      String message = e.getMessage();
      if ( null != message ){
        message = message.toLowerCase();
        // if unknown database, create the database.
        if (    this.config.isAutoCreateSchema() // 是否自动创建不存在的数据库
            && message.indexOf("unknown database") >= 0 ) {
          String oldUrl = this.config.url;
          int idx = oldUrl.lastIndexOf('/');
          String mysqlUrl = oldUrl.substring(0, idx);
          String schema = this.config.getSchema();
          System.out.println("数据库" + schema + "不存在!");
          createSchema(mysqlUrl + "/mysql", schema);
          System.out.println("创建数据库:" + schema + "成功 !");
          this.config.url = oldUrl;
          conn = super.getConnection();
          System.out.println("重新连接成功 !");
          if (this.config.isAutoDDL()) { // 是否自动创建数据库表.
            InitTables init = new InitTables();
            if (init.hadNotExistInDatabase()) {
              init.createTables();
            }
            init.destory();
            init = null;
          }
        } else if ( message.indexOf( "communications link failure" ) >=  0 ) {
          // start mysql.
          TanUtil.startMysql();
          return getConnection();
        } else {
          e.printStackTrace();
        }
      }
    }
        return conn;
    }

    private void createSchema(final  String mysqlUrl, final String schema)
    {
    this.config.url = mysqlUrl;
    Connection conn = null;
    Statement stmt = null;
    final String command = "CREATE DATABASE `" + schema
    + "`CHARACTER SET utf8 COLLATE utf8_unicode_ci";
    try {
      conn = super.getConnection();
      stmt = conn.createStatement();
      System.out.println( command );
      stmt.execute( command );
    } catch (SQLException e) {
      e.printStackTrace();
    } catch (InstantiationException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } finally {
      if (null != conn)
        try {
          conn.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      if (null != stmt)
        try {
          stmt.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
    }
  }

}
TOP

Related Classes of org.qdao.implement.mysql.MySqlDBEngine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.