通过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数据库进行创建新的数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章