If you have a java application and wish to “embed”
a MySQL database, make use of the
com.mysql.management.MysqldResource
class
directly. This class may be instantiated with the default (no
argument) constructor, or by passing in a java.io.File object
representing the directory you wish the server to be "unzipped"
into. It may also be instantiated with printstreams for "stdout"
and "stderr" for logging.
Once instantiated, a java.util.Map
, the
object will be able to provide a
java.util.Map
of server options appropriate
for the platform and version of MySQL which you will be using.
The MysqldResource
enables you to "start"
MySQL with a java.util.Map
of server options
which you provide, as well as "shutdown" the database. The
following example shows a simplistic way to embed MySQL in an
application using plain java objects.
You can find this file in the Connector/MXJ package as
src/ConnectorMXJObjectTestExample.java
.
import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.util.HashMap; import java.util.Map; import com.mysql.management.MysqldResource; import com.mysql.management.MysqldResourceI; import com.mysql.management.util.QueryUtil; public class ConnectorMXJObjectTestExample { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String JAVA_IO_TMPDIR = "java.io.tmpdir"; public static void main(String[] args) throws Exception { File ourAppDir = new File(System.getProperty(JAVA_IO_TMPDIR)); File databaseDir = new File(ourAppDir, "mysql-mxj"); int port = Integer.parseInt(System.getProperty("c-mxj_test_port", "3336")); String userName = "alice"; String password = "q93uti0opwhkd"; MysqldResource mysqldResource = startDatabase(databaseDir, port, userName, password); Class.forName(DRIVER); Connection conn = null; try { String dbName = "our_test_app"; String url = "jdbc:mysql://localhost:" + port + "/" + dbName // + "?" + "createDatabaseIfNotExist=true"// ; conn = DriverManager.getConnection(url, userName, password); String sql = "SELECT VERSION()"; String queryForString = new QueryUtil(conn).queryForString(sql); System.out.println("------------------------"); System.out.println(sql); System.out.println("------------------------"); System.out.println(queryForString); System.out.println("------------------------"); System.out.flush(); Thread.sleep(100); // wait for System.out to finish flush } finally { try { if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } try { mysqldResource.shutdown(); } catch (Exception e) { e.printStackTrace(); } } } public static MysqldResource startDatabase(File databaseDir, int port, String userName, String password) { MysqldResource mysqldResource = new MysqldResource(databaseDir); Map database_options = new HashMap(); database_options.put(MysqldResourceI.PORT, Integer.toString(port)); database_options.put(MysqldResourceI.INITIALIZE_USER, "true"); database_options.put(MysqldResourceI.INITIALIZE_USER_NAME, userName); database_options.put(MysqldResourceI.INITIALIZE_PASSWORD, password); mysqldResource.start("test-mysqld-thread", database_options); if (!mysqldResource.isRunning()) { throw new RuntimeException("MySQL did not start."); } System.out.println("MySQL is running."); return mysqldResource; } }