如何在Java程序中以编程方式启动Mysql服务器?

3

我的Java应用程序需要连接到存储在磁盘上的Mysql数据库文件。

为此,它需要启动一个Mysql服务器并使用该服务器读取文件。问题在于我不确定如何从我的Java代码中启动服务器,读取Mysql文件,对其进行修改,然后停止服务器。

目前,我正在使用类似下面的代码,但我看不到从代码中启动服务器的方法。

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setServerName("MysqlServer");
Connection conn = dataSource.getConnection();

使用此方法时,我遇到了以下问题:

异常情况:java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

我认为这是因为服务器没有开启。请问如何从代码中启动服务器?

如果手动启动了MySQL,您能否运行该应用程序?网络错误可能来自于防病毒软件/防火墙等。 - Jayan
@yan:是的,如果MySQL服务器正在运行,则该应用程序可以正常工作。 - Moeb
@Sai:我正在使用OSX,但是在寻找一个平台无关的解决方案。 - Moeb
如果您想要平台无关性,为什么不使用Apache Derby而不是MySQL呢? - Thorbjørn Ravn Andersen
5个回答

4
  • 选项1:找出如何从命令行启动mysql。然后使用ProcessBuilder来执行此操作。
  • 选项2:如果适合您,请使用可嵌入版本的mysql:请参见详细信息

3

要启动MySQL服务器,需要运行“mysqld.exe”。该文件可以在MySQL主文件夹的“bin”文件夹中找到(假设您正在使用Windows)。在我的情况下,“mysql-5.6.10-win32\bin\mysqld.exe”。

如果您想从Java中执行相同操作,可以使用以下代码。希望有所帮助。

======================================================

String command = "~path~\\mysql-5.6.10-win32\\bin\\mysqld.exe";

try
{
    Process process = Runtime.getRuntime().exec(command);
} 
catch (IOException e)
{
    e.printStackTrace();
}

1

3
  1. 我建议使用ProcessBuilder而不是Runtime.exec()
  2. 尝试在答案中链接更加最新的文档。现在,你正在链接到Java 1.5的文档。
- syb0rg
好的,这只是谷歌搜索中出现的Java Doc链接,在1.7版本中仍然有效。 - MarsAtomic

0
Runtime runTime = Runtime.getRuntime();
Process p = runTime.exec(String[] cmdarray, String[] envp, File dir);
p.waitFor();

-3
最简单的方法是使用JDBC,然后只需向服务器发送查询并解释结果即可。下面是一种简单的连接方式。
import java.sql.*;
Connection conn;
private void connect()
{
    try
    {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection("jdbc:mysql://serverURL","user","pass);
        System.out.println("Connection Established");
    }
    catch (Exception ex) 
    {
        System.err.println("Unable to load the MySQL driver.");
        ex.printStackTrace();
    }

3
需要服务器正在运行。他需要启动它。 - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接