通过java代码如何实现对mysql数据库进行创建新的数据库的操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过java代码如何实现对mysql数据库进行创建新的数据库的操作相关的知识,希望对你有一定的参考价值。

最好有代码

1 import java.sql.Connection;
  2 import java.sql.DriverManager;
  3 import java.sql.ResultSet;
  4 import java.sql.SQLException;
  5 import java.sql.Statement;
  6
  7 public class CreateDataSource
  8
  9 /**
  10 * @param args
  11 */
  12 public static void main(String[] args)
  13 // TODO Auto-generated method stub
  14 String database = "test2";
  15 new CreateDataSource().getConn(database);
  16
  17
  18 String mysqlDriver = "com.mysql.jdbc.Driver";
  19 String url = "jdbc:mysql://localhost:3306/test1";
  20 String newUrl = "jdbc:mysql://localhost:3306/";
  21 String username = "root";
  22 String password = "root";
  23 Connection conn = null;
  24 Connection newConn = null;
  25
  26 public Connection getConn(String database)
  27
  28 try
  29 Class.forName(mysqlDriver);
  30 catch (ClassNotFoundException e)
  31 // TODO Auto-generated catch block
  32 e.printStackTrace();
  33
  34 try
  35 String tableSql = "create table t_user (username varchar(50) not null primary key,"
  36 + "password varchar(20) not null ); ";
  37 String databaseSql = "create database " + database;
  38
  39 conn = DriverManager.getConnection(url, username, password);
  40 Statement smt = conn.createStatement();
  41 if (conn != null)
  42 System.out.println("数据库连接成功!");
  43
  44 smt.executeUpdate(databaseSql);
  45
  46 newConn = DriverManager.getConnection(newUrl + database,
  47 username, password);
  48 if (newConn != null)
  49 System.out.println("已经连接到新创建的数据库:" + database);
  50
  51 Statement newSmt = newConn.createStatement();
  52 int i = newSmt.executeUpdate(tableSql);//DDL语句返回值为0;
  53 if (i == 0)
  54 System.out.println(tableSql + "表已经创建成功!");
  55
  56
  57
  58
  59 catch (SQLException e1)
  60 // TODO Auto-generated catch block
  61 e1.printStackTrace();
  62
  63 return conn;
  64
  65
参考技术A 使用Statement 或PreparedStatement去执行SQL。。。。。。
CREATE DATABASE test1234

使用 Java 对 mysql 数据库进行简单备份和恢复

【中文标题】使用 Java 对 mysql 数据库进行简单备份和恢复【英文标题】:Simple Backup and Restore for mysql Database from Java 【发布时间】:2013-02-17 18:53:56 【问题描述】:

如何从 java 代码中备份 mysql 数据库:

    它的保存路径是动态分配的。 Path 中的空格不会产生问题。 使用执行的 jar 文件生成路径。 DBname、DBusername 或 DBpass 是动态分配的。 创建专用文件夹来保存备份文件。

【问题讨论】:

嗯一定是给我codez day,你试过什么? 实际上我已经发布了代码,以便任何人都可以访问它。有很多人在搜索相同的问题(包括我,花了我 2 天)。所以这是给所有需要帮助的人 很公平,我们会看看人们是否喜欢它。 关于如何从 JSP 代码中使用这些命令的完整且有效的(刚刚测试过的)示例可以在这里找到jvmhost.com/articles/… 是否有不使用 mysqldump 命令的解决方案...如果 mysqldump.exe 在我的 jar 将被执行的地方不可用怎么办.. 简而言之,使用纯 java 是否有可能实现这一目标? (也许使用 mysqlconnector) 【参考方案1】:

注意:下面给出的代码是解决问题的一种方法,可能不是最好的方法。代码中的一切都是可变的。如果环境变量中没有mysql,在mysqldump和mysql前加上路径(例如对于XAMPP,C:\xampp\mysql\bin\mysqldump)

(希望这能解决您的问题。我花了一天时间完全弄清楚所有事情并正确实施)

备份方法:

public static void Backupdbtosql() 
    try 

        /*NOTE: Getting path to the Jar file being executed*/
        /*NOTE: YourImplementingClass-> replace with the class executing the code*/
        CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource();
        File jarFile = new File(codeSource.getLocation().toURI().getPath());
        String jarDir = jarFile.getParentFile().getPath();


        /*NOTE: Creating Database Constraints*/
        String dbName = "YourDBName";
        String dbUser = "YourUserName";
        String dbPass = "YourUserPassword";

        /*NOTE: Creating Path Constraints for folder saving*/
        /*NOTE: Here the backup folder is created for saving inside it*/
        String folderPath = jarDir + "\\backup";

        /*NOTE: Creating Folder if it does not exist*/
        File f1 = new File(folderPath);
        f1.mkdir();

        /*NOTE: Creating Path Constraints for backup saving*/
        /*NOTE: Here the backup is saved in a folder called backup with the name backup.sql*/
         String savePath = "\"" + jarDir + "\\backup\\" + "backup.sql\"";

        /*NOTE: Used to create a cmd command*/
        String executeCmd = "mysqldump -u" + dbUser + " -p" + dbPass + " --database " + dbName + " -r " + savePath;

        /*NOTE: Executing the command here*/
        Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
        int processComplete = runtimeProcess.waitFor();

        /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
        if (processComplete == 0) 
            System.out.println("Backup Complete");
         else 
            System.out.println("Backup Failure");
        

     catch (URISyntaxException | IOException | InterruptedException ex) 
        JOptionPane.showMessageDialog(null, "Error at Backuprestore" + ex.getMessage());
    

恢复方法:

public static void Restoredbfromsql(String s) 
        try 
            /*NOTE: String s is the mysql file name including the .sql in its name*/
            /*NOTE: Getting path to the Jar file being executed*/
            /*NOTE: YourImplementingClass-> replace with the class executing the code*/
            CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource();
            File jarFile = new File(codeSource.getLocation().toURI().getPath());
            String jarDir = jarFile.getParentFile().getPath();

            /*NOTE: Creating Database Constraints*/
             String dbName = "YourDBName";
             String dbUser = "YourUserName";
             String dbPass = "YourUserPassword";

            /*NOTE: Creating Path Constraints for restoring*/
            String restorePath = jarDir + "\\backup" + "\\" + s;

            /*NOTE: Used to create a cmd command*/
            /*NOTE: Do not create a single large string, this will cause buffer locking, use string array*/
            String[] executeCmd = new String[]"mysql", dbName, "-u" + dbUser, "-p" + dbPass, "-e", " source " + restorePath;

            /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
            if (processComplete == 0) 
                JOptionPane.showMessageDialog(null, "Successfully restored from SQL : " + s);
             else 
                JOptionPane.showMessageDialog(null, "Error at restoring");
            


         catch (URISyntaxException | IOException | InterruptedException | HeadlessException ex) 
            JOptionPane.showMessageDialog(null, "Error at Restoredbfromsql" + ex.getMessage());
        

    

【讨论】:

您的方法Backupdbtosql 在执行时显示错误。 Backuprestore 出错无法运行程序“mysqldump”; CreateProcess error=2,系统找不到指定的文件 我正在使用 wampserver 该错误是由于您没有放置 mysqldump.exe 的路径而发生的,我遇到了同样的错误,但对它进行了编码完美。对于 Windows:String executeCmd = "C:\\Program Files (x86)\\MySQL\\MySQL Workbench 6.1 CE\\mysqldump -u" + dbUser + " -p" + dbPass + " --database " + dbName + " -r " + savePath; 这不是最佳解决方案,因为存在一些问题!对不起我的英语 我的朋友。首先感谢这个完整的答案,其次当我在 Backupdbtosql() 方法中执行命令时,此方法不会运行,错误是未知选项'--database' 我的解决方案是替换--database 与数据库 非常感谢,因为它节省了我解决恢复选项的时间。【参考方案2】:

如果Hibernate配置正确,这就是蛋糕:

Session session = HibernateUtil.getSessionFactory().openSession();
// for every table, have the bean implement Serializable and use the next 4 lines
List <TblBean> tblCollection = session.createCriteria(TblBean.class).list();
FileOutputStream backup = new FileOutputStream("backupOf"+TblBean.getClass().getName()+".dat");
ObjectOutputStream backupWriter = new ObjectOutputStream(backup);
backupWriter.write(tblCollection);

【讨论】:

这只是为了实现备份,它需要设置Hibernate+你需要bean实现所有表(可能有100个)其他代码对于新手来说简单易行(虽然不安全且效率低下) ) 问题从“如何从java代码备份mysql数据库”开始。正如您所指出的,我的回答以安全有效的方式做到了这一点,而其他代码则没有。 正如第一条评论中提到的,hibernate并不是最简单的设置,但是一旦设置好,代码就是蛋糕【参考方案3】:
public static String getData(String host, String port, String user, String password, String db,String table) throws Exception 

    //an "C:/xampp/mysql/bin/mysqldump" ---- location ito han mysqldump

    Process run = Runtime.getRuntime().exec(
            "C:/xampp/mysql/bin/mysqldump --host="  + host + " --port=" + port + 
            " --user=" + user + " --password=" + password +
            " --compact --databases --add-drop-table --complete-insert --extended-insert " +
            "--skip-comments --skip-triggers "+ db+" --tables "+table);

    InputStream in = run.getInputStream(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    StringBuffer temp = new StringBuffer();
    int count;
    char[] cbuf = new char[BUFFER];

    while ((count = br.read(cbuf, 0, BUFFER)) != -1)
        temp.append(cbuf, 0, count);

    br.close();
    in.close();

    return temp.toString();

【讨论】:

【参考方案4】:

除了 chettyharish 的回答,如果您的服务器操作系统是 ubuntu,则路径应该有前斜杠“/”而不是反斜杠“\”,例如 /path/to/your/file

例如:String savePath = "\"" + jarDir + "\\backup\\" + "backup.sql\"";

将是:String savePath="/"+jarDir+"/backup/backup.sql"

【讨论】:

以上是关于通过java代码如何实现对mysql数据库进行创建新的数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章

Java如何实现对Mysql数据库的行锁

如何通过java代码复制MySQL中新建数据库中的数据库结构?

java中如何讲Excel中的数据导入到Mysql

java怎么和数据库连接

如何用java实现mysql数据库的导入导出

使用sqlalchemy对mysql进行增删改查