java jdbc 修改mysql数据库的引擎 InnoDB

来源:互联网 发布:gigi hadid 知乎 编辑:程序博客网 时间:2024/05/19 01:09

要修改数据库的引擎 首先该数据库要支持修改的引擎

编写获取数据源的类(看自己的数据库连接属性对西面的连接做修改) 

 本列数据库连接用到单例模式

单列的必要条件  静态的属性 私有的构造方法 对外公共的获取连接的方法

 

package com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBconn {
 private static String driver = "com.mysql.jdbc.Driver";
 private static String url = "jdbc:mysql://localhost:3306/nlticket2";
 private static String uname = "root";
 private static String pwd = "";
 private static Connection conn = null;   //静态的属性

 private DBconn() {//私有的构造方法
  super();
 }

 public static Connection getConn() {//对外提供公共的调用连接的方法
  if (conn == null) {
   try {
    Class.forName(driver);
    conn = DriverManager.getConnection(url, uname, pwd);
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  return conn;
 }
}

 

编写修改数据库引擎的方法

 

package com;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Tool {
 /**
  * 修改數據庫引擎
  *
  * @param conn
  *            數據庫連接
  * @param engines
  *            修改后的數據庫引擎
  */
 public static void setDatabaseEngines(Connection conn, String engines) {
  try {
   DatabaseMetaData dbmd = conn.getMetaData();
   // 获得所有的表名
   ResultSet rs = dbmd.getTables(null, null, null,
     new String[] { "table" });
   while (rs.next()) {
    // 循环结果集 并執行修改數據庫引擎的sql
    String tname = rs.getString("table_name");
    String sql = "ALTER TABLE " + tname + " type=" + engines;
    conn.createStatement().executeUpdate(sql);
    System.out.println(tname + ": 已修改為 " + engines);
   }
   conn.close();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   // 如果數據庫不支持 engines 在mysql里也執行不了sql 會報錯
   System.out.println("數據庫不支持 " + engines + " 引擎");
  }
 }

 public static void main(String[] args) {
  // 調用上面的方法 將數據庫修改為 INNODB
  setDatabaseEngines(DBconn.getConn(), "INNODB");
 }
}